Path Traversal — Travessia de Diretório
Path Traversal permite ler arquivos fora do diretório permitido usando ../. Veja bypass de filtros (encoding, null byte) e como proteger endpoints de download.
O Que É Path Traversal
Path Traversal (também Directory Traversal) permite que um atacante acesse arquivos fora do diretório-base da aplicação usando sequências de ../ (e variantes encoded). É especialmente crítico em funcionalidades de download de arquivo, preview de documento, e qualquer leitura de arquivo baseada em input do usuário. Pode levar à leitura de /etc/passwd, arquivos de configuração com credenciais, chaves SSH e código-fonte.
Exemplo Real de Ataque
# Tentativa direta
GET /api/v1/download?file=../../../etc/passwd
→ HTTP 403 (filtro básico detectado)
# Bypass via URL encoding
GET /api/v1/download?file=%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd
→ HTTP 200, conteúdo do /etc/passwd
# Bypass via double encoding
GET /api/v1/download?file=%252e%252e%252fetc%252fpasswd
# Bypass via null byte (versões antigas PHP)
GET /api/v1/download?file=../../../etc/passwd%00.pdfImpacto no Negócio e Compliance
Leitura de arquivos de configuração (.env, config.yaml, database.yml) com credenciais de banco de dados e chaves de API. Acesso ao código-fonte da aplicação. Em casos com write access: comprometimento total via sobrescrita de arquivos de configuração ou web shells.
Como Remediar
import os
from pathlib import Path
BASE_DIR = Path("/app/uploads").resolve()
def safe_file_path(filename: str) -> Path:
# ✅ Canonicalize e valide que o path resultante está dentro do BASE_DIR
safe_path = (BASE_DIR / filename).resolve()
# Verifica se o path canonicalizado está dentro do diretório base
if not str(safe_path).startswith(str(BASE_DIR)):
raise ValueError(f"Path traversal detectado: {filename}")
if not safe_path.exists():
raise FileNotFoundError(f"Arquivo não encontrado")
return safe_path
# ✅ Adicionalmente: use IDs para referenciar arquivos, não nomes
# Mapeie file_id → path no banco de dados, nunca exponha o path realComo a Veyronn Detecta Esta Vulnerabilidade
Testamos path traversal em todos os parâmetros de nome de arquivo, tanto na URL quanto em JSON bodies. Tentamos múltiplos encodings para bypass: URL encoding (%2e%2e%2f), double encoding, null byte, e variantes específicas de sistema operacional.
Vulnerabilidades Relacionadas
Pronto para Contratar seu Próximo Pentest?
Adquira nossa avaliação pontual feita pelos melhores profissionais do mercado ou implemente o software da Veyronn 24/7.
