Path traversal é quando colocar ../ num campo de nome de arquivo torna legível um arquivo .env lá no fundo do servidor. Veja como funciona e como evitá-lo de forma confiável (sem passos de ataque).
Onde aparece
Em qualquer lugar onde "a entrada do usuário escolhe um arquivo".
| Recurso | O uso arriscado |
|---|---|
| Download / pré-visualização | Usar ?file= diretamente como nome do arquivo |
| Exibição de imagem / anexo | Montar parte do caminho a partir de um parâmetro da URL |
| Upload | Usar um nome fornecido pelo usuário no caminho de salvamento (tipo escrita — o mais perigoso) |
| Carregamento de template / locale | Escolher um arquivo dinamicamente via ?lang= etc. |
Por que funciona
../ significa "subir um nível". Se a aplicação concatena pasta pública + entrada do usuário e abre esse arquivo, segmentos ../ empilhados deixam a requisição alcançar arquivos fora da pasta pública.
Leitura significa divulgação; escrita (uploads) significa arquivos plantados em qualquer lugar, o que pode levar a RCE.
Defesa: não use entrada como caminho + confine à base
Nunca use entrada do usuário como caminho de arquivo cru (o mais importante)
Resolva os arquivos expostos por meio de uma allowlist de ID → arquivo real. O usuário passa apenas um identificador ("3", "fatura"); o servidor decide o caminho real.
Normalize e depois verifique que permanece dentro do diretório base
Transforme em um caminho absoluto com o resolvedor da linguagem (resolve/realpath), e então verifique se ele começa com o diretório base permitido. Rejeite qualquer coisa fora. A remoção ingênua da string '../' falha diante de contornos por codificação.
Rode a aplicação com privilégio mínimo
Limite quais arquivos o usuário de runtime da aplicação pode ler ao que o trabalho exige. Mesmo que alguém escape, arquivos ilegíveis não vazam nada.
Mantenha segredos totalmente fora da raiz pública
Não coloque .env, .git, chaves ou backups na raiz web ou na pasta de upload, para começar. Só o posicionamento já remove o que poderia ser atacado.
A visão deste site: é o mesmo tipo de problema que erros de posicionamento, então corrija na ordem certa
Path traversal é o mesmo tipo de problema que o incidente de exposição do .env: ambos são "algo que jamais deveria ser alcançável pela web torna-se alcançável pela web". Medidas temporárias (cabeçalhos, filtros ingênuos) só cobrem a superfície; se o código e o posicionamento não forem corrigidos, outra rota ainda vaza. A ordem é (1) código que não usa entrada como caminho, (2) confinamento ao diretório base, (3) manter segredos fora da raiz pública. Leia posicionamento seguro em hospedagem compartilhada junto com isto para ver como funciona a correção de raiz.
Como difere de problemas parecidos
O resultado pode parecer o mesmo, "um arquivo que deveria ser privado pode ser lido de fora", mas a causa decide onde corrigir.
| Problema | Causa | Onde corrigir |
|---|---|---|
| Path traversal | Uma entrada que aponta para um arquivo consegue sair do local permitido | Código da aplicação (não usar entrada como caminho) |
| Inclusão de arquivo local (LFI) | A entrada escolhe um arquivo que o programa carrega e executa | Código da aplicação (fixar quais arquivos podem ser carregados) |
| Arquivos esquecidos em diretório público | .env ou .git fica onde a web pode ver (→ segredos esquecidos em diretórios públicos) | Posicionamento dos arquivos e configuração do servidor web |
| IDOR | O ID do arquivo tem formato válido, mas pode apontar para o arquivo de outra pessoa | Verificações de permissão da aplicação |
Exemplos reais: falhas no próprio servidor web
O path traversal aparece não só em aplicações próprias, mas também em produtos muito usados.
- Apache HTTP Server 2.4.49 (2021): tinha uma falha de path traversal (CVE-2021-41773), e o projeto Apache declarou que ela era sabidamente explorada. A versão 2.4.50 a corrigiu, mas a correção era incompleta (CVE-2021-42013), então foi corrigida de novo na 2.4.51. Dependendo da configuração, levava não só à leitura de arquivos, mas também a RCE.
- Núcleo do WordPress (2026): um path traversal no código que resolve templates de página levou a uma falha de inclusão de arquivos (CVE-2026-87902) que pode chegar a RCE sob certas condições (→ CVE-2026-87902 explicado, em inglês).
Em maio de 2024, as agências americanas CISA e FBI publicaram um alerta pedindo aos fabricantes que eliminem esse tipo de falha. Naquele momento, segundo elas, o KEV da CISA (a lista de vulnerabilidades com exploração confirmada) continha 55 vulnerabilidades de directory traversal. No "CWE Top 25" da MITRE publicado em dezembro de 2025, o path traversal (CWE-22) está em sexto lugar.
Como verificar o seu próprio site
Encontre operações de arquivo que recebem entrada
Procure no seu código funções que abrem ou enviam arquivos (open, readFile, sendFile, include etc.) ou montam caminhos (path.join e similares) onde valores da requisição podem chegar.
Verifique a ordem das verificações
Onde a entrada é usada, confirme que o caminho é normalizado primeiro (path.resolve ou realpath) e só depois verificado como estando dentro do diretório base. Se o código só inspeciona a string antes de normalizar, corrija a ordem.
Verifique as versões do servidor web e dos produtos
Garanta que você não está rodando versões com path traversal conhecido, como o Apache 2.4.49 ou 2.4.50. A consulta de CVE / KEV mostra vulnerabilidades conhecidas nos produtos que você usa.
Verifique arquivos que não podem ficar visíveis
Use a auditoria do site para conferir que .env, .git e dumps de banco de dados não podem ser lidos de fora. Se puderem, corrija o posicionamento como um trabalho separado do path traversal.
Fontes (primárias)
- CISA e FBI, "Secure by Design Alert: Eliminating Directory Traversal Vulnerabilities in Software" (2 de maio de 2024) — cisa.gov (em inglês; 55 entradas no KEV, uso de identificadores aleatórios)
- Apache HTTP Server, "Apache HTTP Server 2.4 vulnerabilities" — httpd.apache.org (em inglês; CVE-2021-41773, CVE-2021-42013)
- MITRE, "2025 CWE Top 25 Most Dangerous Software Weaknesses" (dezembro de 2025) — cwe.mitre.org (em inglês; CWE-22 em sexto lugar)
- OWASP, "Path Traversal" — owasp.org (em inglês)
- IPA, "How to Secure Your Web Site" — ipa.go.jp (em japonês; parâmetros de caminho sem verificação / directory traversal)
Leia a seguir
- Incidente: Expondo o arquivo .env inteiro
- Defesa: Protegendo o .env em hospedagem compartilhada · Glossário: O que é RCE