Path Traversal

Introdução

Path Traversal, também conhecido como Directory Traversal, é uma vulnerabilidade de segurança que permite a um atacante acessar arquivos e diretórios armazenados fora do diretório raiz da web. Esta pesquisa detalha a natureza da vulnerabilidade, seus mecanismos de exploração, exemplos práticos e métodos de prevenção.

O que é Path Traversal?

Um ataque de Path Traversal (também conhecido como Directory Traversal) visa acessar arquivos e diretórios que estão armazenados fora da pasta raiz da web. Ao manipular variáveis que referenciam arquivos com sequências de "dot-dot-slash (../)" e suas variações, ou usando caminhos de arquivo absolutos, é possível acessar arquivos e diretórios arbitrários armazenados no sistema de arquivos, incluindo código-fonte da aplicação, configurações e arquivos críticos do sistema. É importante notar que o acesso a arquivos é limitado pelo controle de acesso operacional do sistema (como no caso de arquivos bloqueados ou em uso no sistema operacional Microsoft Windows).

Este ataque também é conhecido como "dot-dot-slash", "directory traversal", "directory climbing" e "backtracking" [1].

Como funciona o Path Traversal?

A vulnerabilidade de Path Traversal ocorre quando uma aplicação web inclui um recurso ou arquivo com base em uma entrada fornecida pelo usuário sem a validação ou sanitização adequada. Por exemplo, se uma aplicação carrega uma imagem usando uma URL como https://exemplo.com/loadImage?filename=218.png, e no backend o servidor processa essa requisição anexando o nome do arquivo a um diretório base como /var/www/images/218.png, um atacante pode manipular o parâmetro filename para acessar outros arquivos no servidor [2].

Sequência ../

A sequência ../ é fundamental para os ataques de Path Traversal. Ela permite que um atacante navegue para cima na estrutura de diretórios do sistema de arquivos. Por exemplo, se o diretório base é /var/www/images/, e o atacante fornece ../../../etc/passwd como entrada, o caminho resultante seria /var/www/images/../../../etc/passwd, que se resolve para /etc/passwd [2].

  • Um único ../ sobe um nível.

  • ../../ sobe dois níveis.

  • ../../../ sobe três níveis, e assim por diante.

Variações de Requisição e Codificação

Atacantes podem usar várias técnicas de codificação para tentar contornar as defesas da aplicação. Algumas variações comuns incluem [1]:

  • %2e%2e%2f representa ../

  • %2e%2e/ representa ../

  • ..%2f representa ../

  • %2e%2e%5c representa ..\

  • %2e%2e\ representa ..\

  • ..%5c representa ..\

  • %252e%252e%255c representa ..\

  • ..%255c representa ..\

Além disso, a codificação percentual (também conhecida como codificação de URL) pode ser usada. Contêineres web geralmente realizam um nível de decodificação em valores codificados em percentual de formulários e URLs. Exemplos incluem [1]:

  • ..%c0%af representa ../

  • ..%c1%9c representa ..\

Em muitos sistemas operacionais, bytes nulos (%00) podem ser injetados para encerrar o nome do arquivo. Por exemplo, enviar um parâmetro como ?file=secret.doc%00.pdf fará com que a aplicação Java veja uma string que termina com ".pdf", mas o sistema operacional verá um arquivo que termina em ".doc". Atacantes podem usar esse truque para contornar rotinas de validação [1].

Caminho Absoluto

Atacantes também podem tentar usar caminhos absolutos diretamente da raiz do sistema de arquivos, como filename=/etc/passwd [2].

Onde procurar por vulnerabilidades de Path Traversal?

Sempre que um recurso ou arquivo é incluído pela aplicação, existe o risco de um atacante poder incluir um arquivo ou recurso remoto de forma não autorizada. Isso inclui [1]:

  • Parâmetros de URL: https://insecure-vulnerable-website.com/loadFile?filename=

  • Inclusão de arquivos: Quando a aplicação carrega arquivos com base em entrada do usuário.

  • APIs de sistema de arquivos: Qualquer função que interaja com o sistema de arquivos e receba entrada do usuário.

Exemplos de Exploração

Caso Simples

?filename=../../../etc/passwd

Caminho Absoluto

?filename=/etc/passwd

Sequências de Traversal Aninhadas

?filename=....//....//....//etc/passwd

Codificação de URL

?filename=..%2f..%2f..%2fetc/passwd

Dupla Codificação de URL

?filename=..%252f..%252f..%252fetc/passwd

Pasta Base Seguida por Sequências de Traversal

?filename=/var/www/images/../../../etc/passwd

Bypass de Byte Nulo

?filename=../../../etc/passwd%00.png

Exemplos de Arquivos "Suculentos" para Leitura

Arquivos Linux:

  • /etc/passwd

  • /etc/hosts

  • /etc/shadow

Arquivos Windows:

  • C:/boot.ini

  • C:/Windows/win.ini

  • C:/WINNT/win.ini

Como Prevenir Path Traversal

A maneira mais eficaz de prevenir vulnerabilidades de Path Traversal é evitar passar entrada fornecida pelo usuário para APIs de sistema de arquivos. Muitas funções de aplicação que fazem isso podem ser reescritas para entregar o mesmo comportamento de forma mais segura [1].

Recomendações:

  • Preferir trabalhar sem entrada do usuário: Sempre que possível, evite usar entrada do usuário ao fazer chamadas ao sistema de arquivos [1].

  • Usar índices em vez de nomes de arquivos: Ao usar modelos ou arquivos de idioma, utilize índices em vez de partes reais de nomes de arquivos (por exemplo, valor 5 da submissão do usuário = Checoslovaco, em vez de esperar que o usuário retorne "Checoslovaco") [1].

  • Garantir que o usuário não possa fornecer todas as partes do caminho: Cerque a entrada do usuário com seu próprio código de caminho [1].

  • Validar a entrada do usuário: Aceite apenas entradas conhecidas como boas; não apenas sanitize os dados [1].

  • Usar chrooted jails e políticas de acesso a código: Restrinja onde os arquivos podem ser obtidos ou salvos [1].

  • Normalizar a entrada: Se for forçado a usar entrada do usuário para operações de arquivo, normalize a entrada antes de usá-la em APIs de E/S de arquivo, como normalize() [1].

  • Não armazenar arquivos de configuração sensíveis dentro da raiz da web [1].

  • Para servidores Windows IIS, a raiz da web não deve estar no disco do sistema, para evitar a travessia recursiva de volta aos diretórios do sistema [1].

Referências

[1] OWASP. Path Traversal. Disponível em: https://owasp.org/www-community/attacks/Path_Traversal

[2] HackerNoon. A Deep Dive into Path Traversal Vulnerabilities. Disponível em: https://hackernoon.com/a-deep-dive-into-path-traversal-vulnerabilities

Atualizado