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