No mundo da cibersegurança existem vulnerabilidades que, apesar de parecerem simples, podem permitir a um atacante aceder a ficheiros que deveriam estar completamente protegidos. Uma delas é conhecida como Path Traversal.
Esta vulnerabilidade pode surgir quando uma aplicação não valida corretamente os caminhos de ficheiros fornecidos pelo utilizador, permitindo que um atacante saia do diretório previsto e tente aceder a outros ficheiros existentes no sistema.
O que é o Path Traversal?
O Path Traversal, também conhecido como Directory Traversal, é uma vulnerabilidade que permite manipular o caminho utilizado por uma aplicação para aceder a ficheiros ou diretórios.
Imagine uma aplicação que permite descarregar um ficheiro através de um endereço semelhante a:
https://exemplo.pt/download?file=manual.pdf
À partida, a aplicação deveria permitir apenas o acesso a ficheiros existentes numa determinada pasta.
O problema surge quando o valor recebido pelo servidor é utilizado diretamente, sem uma validação adequada.
Em sistemas Unix/Linux, um atacante pode tentar utilizar sequências como:
../
Estas representam o diretório pai. Ao repetir esta sequência, pode tentar subir vários níveis na estrutura de diretórios.
../../../etc/passwd
Se a aplicação for vulnerável e tiver permissões suficientes, poderá acabar por tentar aceder a um ficheiro que está completamente fora do diretório originalmente permitido.
..\..\
Porque é perigoso?
O impacto depende sobretudo das permissões da aplicação e dos ficheiros que podem ser alcançados.
Um ataque de Path Traversal pode permitir:
- Ler ficheiros de configuração;
- Expor credenciais ou chaves armazenadas em ficheiros;
- Aceder a informação de outros utilizadores;
- Consultar ficheiros de configuração de aplicações;
- Obter informação sobre o sistema operativo;
- Em determinadas situações, modificar ou eliminar ficheiros.
Por exemplo, um ficheiro de configuração pode conter credenciais de acesso a uma base de dados. Se esse ficheiro puder ser lido através de Path Traversal, o atacante poderá utilizar essas informações para realizar outros ataques.
É importante destacar que Path Traversal não significa necessariamente execução de código. O objetivo inicial pode ser simplesmente conseguir aceder a ficheiros que deveriam estar fora do alcance do utilizador.
Como acontece?
O problema normalmente está relacionado com a forma como a aplicação constrói os caminhos dos ficheiros.
Um exemplo conceptual seria:
/dados/uploads/ + nome_do_ficheiro
Se a aplicação aceitar diretamente nome_do_ficheiro fornecido pelo utilizador, um atacante poderá tentar introduzir elementos que alterem o caminho final. Em vez de:
/dados/uploads/documento.pdf
poderá tentar construir algo semelhante a:
/dados/uploads/../../ficheiro.conf
Se não existir uma validação adequada, o sistema poderá interpretar o caminho e navegar para fora da pasta prevista.
Path Traversal vs. Local File Inclusion
Embora estejam relacionados, Path Traversal e Local File Inclusion (LFI) não são exatamente a mesma coisa.
No Path Traversal, o principal objetivo é normalmente aceder a ficheiros ou diretórios fora do local autorizado.
No LFI, a vulnerabilidade permite que uma aplicação inclua um ficheiro local no processamento de uma página ou recurso. Dependendo da aplicação e das condições existentes, isso pode ter consequências mais graves.
Por isso, uma vulnerabilidade de Path Traversal pode, em determinados cenários, fazer parte de uma cadeia de ataque mais complexa.
Como prevenir ataques de Path Traversal?
A principal medida de proteção é nunca confiar diretamente nos caminhos fornecidos pelo utilizador.
Entre as boas práticas estão:
- Validar os dados recebidos
- A aplicação deve validar os nomes e caminhos recebidos e rejeitar entradas que não correspondam ao formato esperado.
- Utilizar uma lista de ficheiros permitidos
- Sempre que possível, é preferível utilizar uma allowlist.
- Por exemplo, em vez de aceitar qualquer nome de ficheiro, a aplicação pode permitir apenas identificadores associados a ficheiros previamente registados.
- Normalizar os caminhos
- Os caminhos devem ser normalizados antes de serem utilizados e comparados com o diretório que deveria servir de base.
- A aplicação deve garantir que o caminho final continua efetivamente dentro do diretório autorizado.
- Aplicar o princípio do menor privilégio
- Mesmo que uma vulnerabilidade exista, as consequências podem ser reduzidas se a aplicação funcionar com apenas as permissões necessárias.
- Um servidor web não deveria, por exemplo, ter permissões de leitura sobre todos os ficheiros do sistema.
- Evitar construir caminhos diretamente com dados do utilizador
- Sempre que possível, a aplicação deve utilizar mecanismos seguros de identificação de recursos em vez de concatenar diretamente valores fornecidos pelo utilizador com caminhos do sistema.