Glossário

O que é path traversal — ler arquivos que o servidor jamais deveria servir, via ../

Path traversal usa ../ em um nome de arquivo para ler fora da pasta, como .env e chaves. A defesa: não usar a entrada como caminho e confinar a um diretório.

Publicado 2026-06-10 Atualizado 2026-10-06 7 min de leitura
Nesta página

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".

RecursoO uso arriscado
Download / pré-visualizaçãoUsar ?file= diretamente como nome do arquivo
Exibição de imagem / anexoMontar parte do caminho a partir de um parâmetro da URL
UploadUsar um nome fornecido pelo usuário no caminho de salvamento (tipo escrita — o mais perigoso)
Carregamento de template / localeEscolher 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.

Pretendido: /var/www/files/ + entrada do usuário
A entrada empilha "subir um nível" (../ ../ ../ …)
↓ a aplicação concatena sem normalizar, depois open()
Alcança fora da base (.env, configurações, chaves, /etc) = leitura/escrita
Concatene a entrada do usuário à pasta base e ../ empilhados alcançam arquivos fora dela.

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

1

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.

2

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.

3

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.

4

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.

ProblemaCausaOnde corrigir
Path traversalUma entrada que aponta para um arquivo consegue sair do local permitidoCó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 executaCó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
IDORO ID do arquivo tem formato válido, mas pode apontar para o arquivo de outra pessoaVerificaçõ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

1

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.

2

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.

3

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.

4

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

Classificação

O CWE classifica os tipos de fraqueza por trás das vulnerabilidades; o MITRE ATT&CK classifica as técnicas dos atacantes. Ambos são mantidos pela MITRE e amplamente usados para rotular vulnerabilidades e regras de detecção.

CWE™: Copyright © 2006–2026, The MITRE Corporation. CWE is a trademark of The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. Any copy you make for such purposes is authorized on the condition that you reproduce MITRE’s copyright designation and this license in any such copy. CWE Terms of Use

FAQ

QO que vaza no path traversal?
A

Arquivos que a aplicação nunca deveria expor: .env (credenciais de banco, chaves de API), arquivos de configuração, chaves privadas, código-fonte, caminhos do SO como /etc. Além de leitura, se alcançar o caminho de destino de um upload, pode escrever em qualquer lugar e escalar para RCE (execução remota de código).

QQual é a principal defesa?
A

Nunca use entrada do usuário como caminho de arquivo cru. Se precisar, mapeie-a por uma allowlist (um conjunto fixo de IDs/nomes de arquivo), normalize o caminho com uma biblioteca e verifique que o resultado permanece dentro do diretório base permitido. Verificações de extensão ou remoção ingênua de '../' são contornadas.

QPosso simplesmente bloquear com .htaccess ou cabeçalhos?
A

Isso é uma medida temporária para um problema diferente (arquivos sensíveis na raiz web). A correção de raiz é colocar o corpo da aplicação, o .env e o .git FORA da raiz pública, mais código que não use entrada como caminho. A medida temporária e a correção de raiz são trabalhos separados.

QDirectory traversal e path traversal são a mesma coisa?
A

Sim. O guia da IPA do Japão chama de directory traversal, e a classificação da MITRE (CWE-22) chama de Path Traversal. Ambos significam que uma entrada que aponta para um arquivo alcança arquivos fora do local permitido.

QDar IDs aleatórios aos arquivos previne isso?
A

É uma abordagem eficaz. No alerta de maio de 2024, as agências americanas CISA e FBI recomendam gerar um identificador aleatório para cada arquivo e guardar separadamente as informações relacionadas, como o nome original. Assim a entrada do usuário nunca vira parte de um caminho, e esse tipo de falha não tem onde ocorrer.

QComo difere da inclusão de arquivo local (LFI)?
A

Path traversal significa que arquivos fora do local permitido podem ser lidos ou escritos. LFI significa que a entrada escolhe um arquivo que o programa carrega e executa, e o path traversal muitas vezes é usado para apontá-lo para um arquivo de fora. Como a LFI executa o arquivo como código em vez de só lê-lo, leva mais facilmente a RCE.