Path traversal, também conhecido como directory traversal, ocorre quando um usuário malicioso manipula dados fornecidos pelo usuário para obter acesso não autorizado a arquivos e diretórios. Tipicamente, o atacante tentará acessar logs e credenciais que estão em diretórios diferentes. Path traversal não é uma vulnerabilidade nova e tem sido ativamente explorada desde os anos 90, quando os servidores web ganharam popularidade, muitos dependiam de scripts Common Gateway Interface (CGI) para executar conteúdo dinâmico no lado do servidor.
Com uma história tão longa, o path traversal ainda é popular hoje? Conduzimos um estudo em projetos de código aberto e código fechado para coletar dados e verificar a frequência do path traversal em 2024 e se estamos melhorando, Spoilers: não estamos.
Exemplo de path traversal
Então, como exatamente o path traversal funciona? Vamos ver um exemplo simples.
Nesta aplicação simples, um usuário recebe um arquivo para download através de uma variável na URL.

Há um código Python simples no backend que lida com a requisição.
import os
def download_file(file):
base_directory = "/var/www/files"
file_path = os.path.join(base_directory, file)
if os.path.exists(file_path):
with open(file_path, 'rb') as f:
return f.read()
else:
return "File not found"
Agora, como a variável é fornecida na URL, podemos alterá-la para algo como isto file=../../../../etc/passwd

Aqui, o atacante está usando o ../../ para navegar pela estrutura de diretórios até o nível raiz do sistema e acessar o arquivo passado, potencialmente obtendo acesso a informações sensíveis.
Se você quiser ver como este método pode ser protegido, role para baixo até o conteúdo bônus.
Em cenários mais complexos, envolvendo múltiplas camadas de diretórios ou caracteres codificados (por exemplo, %2e%2e%2f), atacantes podem contornar filtros básicos e obter acesso mais profundo ao sistema de arquivos.Path traversal em números
- 2,7% de todas as vulnerabilidades encontradas em projetos de código aberto em 2024 até agora foram de path traversal
- 3,5% para projetos de código fechado !
- Um aumento no número total de vulnerabilidades de path traversal em projetos de código aberto de 742 (2023) para um esperado 1.000 (2024).
- Como porcentagem de todas as vulnerabilidades, o path traversal está se tornando mais comum com um aumento massivo de 85% em projetos de código fechado

Nossa pesquisa focou em investigar tanto projetos de código aberto quanto de código fechado para revelar quantos continham vulnerabilidades de path traversal ocultas.
No geral, o número de vulnerabilidades de path traversal é menor do que algumas outras que pesquisamos, como Command Injections ou SQL Injections. Mas, considerando que essa vulnerabilidade pode ser muito perigosa e possui soluções bem documentadas para preveni-la, é alarmante ver os números tão altos quanto estão. É ainda mais alarmante ver as tendências para essa vulnerabilidade indo na direção errada.
Projetos de Código Aberto
Em projetos de código aberto, o path traversal representou 2,6% de todas as vulnerabilidades reportadas em 2023. Esse número teve um leve aumento em 2024, subindo para 2,75%. Embora esse incremento possa parecer marginal à primeira vista, ele ressalta os desafios contínuos na proteção de software de código aberto contra vulnerabilidades mesmo simples.
Projetos de Código Fechado
A tendência mais notável foi observada em projetos de código fechado, onde os incidentes de path traversal aumentaram de 1,9% em 2023 para 3,5% em 2024 — um aumento substancial de 85%, destacando uma tendência alarmante desse tipo de vulnerabilidade.
As más notícias, infelizmente, não param por aí. Ainda estamos vendo um aumento no número geral de vulnerabilidades reportadas em projetos de código aberto. O número total de vulnerabilidades de injeção reportadas em projetos de código aberto passou de 742 em 2023 para 917 até agora em 2024 (com expectativa de atingir 1.000).

Prevenindo Path Traversal
Prevenir vulnerabilidades de command injection exige uma abordagem multifacetada:
Validação de Entrada
- Sanear entradas de usuário: Remover ou codificar caracteres perigosos como
../,..\,..%2f, ou outras variações. - Abordagem de lista de permissões: Defina um conjunto estrito de entradas permitidas (por exemplo, nomes de arquivos ou caminhos) e rejeite qualquer coisa fora dessa lista.
Restringir Acesso a Arquivos
- Use um chroot jail ou sandbox: Limite o acesso a arquivos da aplicação a um diretório restrito, garantindo que ela não possa navegar além da árvore de diretórios pretendida.
- Defina diretórios raiz: Defina diretórios base e garanta que todos os caminhos sejam relativos a eles. Utilize APIs ou frameworks que imponham isso, como:
java.nio.file.Paths.get("baseDir").resolve(userInput).normalize()em Java.os.path.realpath()eos.path.commonpath()em Python.
APIs de Acesso Seguro a Arquivos
- Utilize métodos seguros de acesso a arquivos fornecidos por bibliotecas ou frameworks modernos: Em Java, use
Files.newInputStream()ouFiles.newBufferedReader()para manipulação segura de arquivos.
Em Python, certifique-se de validar os caminhos dos arquivos antes de acessá-los.
Utilize Restrições de Ambiente
- Defina permissões restritivas de sistema de arquivos: Garanta que a aplicação tenha apenas os privilégios mínimos necessários.
Negue o acesso a diretórios sensíveis (por exemplo,/etc,/var,/usr, e diretórios home de usuários). - Desabilite funcionalidades desnecessárias em servidores web ou frameworks (por exemplo, o seguimento de links simbólicos).
Testes Automatizados
- Use ferramentas como Aikido analisar o seu código-fonte e a sua aplicação e descobrir essas vulnerabilidades.
- DAST SAST DAST devem ser utilizadas em conjunto com a verificação de domínios e segurança na nuvem garantir que não existem vulnerabilidades ocultas de traversal de caminhos.
Use um firewall incorporado no aplicativo
- Uma das melhores defesas contra ataques de injeção é um firewall incorporado no aplicativo capaz de detectar e bloquear comandos maliciosos.
O caminho a seguir
Path traversal é uma vulnerabilidade presente desde o início das aplicações web e, embora seja frequentemente bastante simples, também pode ser um exploit muito devastador. Isso torna preocupante o fato de uma grande porcentagem de projetos ainda estarem enfrentando tais problemas. Embora 3,5% não pareça um número alto, é bastante notável que o número esteja crescendo em popularidade, apesar de sua ameaça clara, contínua e bem documentada.
O "path traversal" não é uma vulnerabilidade que vai desaparecer, mas a boa notícia é que existem maneiras claras de encontrarmos essas vulnerabilidades em nossa aplicação e corrigirmos quaisquer problemas que identificarmos.
Conteúdo Bônus
Incidentes do Mundo Real
Nos últimos anos, ocorreram várias violações ou vulnerabilidades de alto perfil que envolveram "path traversal" como ponto de entrada principal ou como parte de uma cadeia de vulnerabilidades.
Exploit Unicode do Microsoft IIS (2001)
Um dos primeiros exploits de "path traversal" de alto perfil que visava servidores Microsoft IIS. Atacantes usaram caminhos codificados para contornar mecanismos de validação (por exemplo, usando %c0%af para representar /). Isso permitiu que eles acessassem e executassem arquivos fora do diretório raiz da web.
Isso possibilitou a implantação de malware e a desfiguração de inúmeros websites.
Traversal de caminhoFortinet (2019)
Foi descoberta uma vulnerabilidade de traversal de diretório (CVE-2018-13379) na VPN SSL Fortinet. Os invasores exploraram essa falha para aceder a ficheiros confidenciais do sistema, como senhas em texto simples de utilizadores de VPN.
Milhares de credenciais de VPN foram vazadas online, expondo organizações a acessos não autorizados e a ataques futuros.
Violação da Capital One (2019)
O que aconteceu: Embora a causa principal tenha sido uma vulnerabilidade SSRF, o atacante também utilizou "directory traversal" para acessar metadados de buckets AWS S3. O atacante explorou configurações incorretas para recuperar arquivos de configuração que deveriam ser inacessíveis.
Isso expôs dados pessoais de 106 milhões de solicitantes de cartão de crédito.
Path Traversal no Kubernetes Dashboard (2020)
O Painel do Kubernetes tinha uma falha de traversal de diretório (CVE-2020-8563). Os invasores exploraram isso para ler ficheiros confidenciais no container, incluindo secrets em /etc.
Proteja seu software agora



.avif)
