Vulnerabilidades de Path Traversal

3 years ago 247
BOOK THIS SPACE FOR AD
ARTICLE AD

Mauricio Maciel

Imagine que você está em um andar de um edifício e todas as portas estão trancadas, então você começa a descer andares e todos estão na mesma situação, até que você encontra um andar onde há uma porta aberta e a mesma dá acesso a tudo do prédio. Isso é como a vulnerabilidade de Path Traversal (ou Directory Traversal) se parece para pentesters.

Vulnerabilidades de Path Traversal surgem quando o aplicativo usa dados controláveis pelo usuário para acessar arquivos e diretórios no servidor de maneira insegura. Ao enviar uma entrada criada, um invasor pode fazer com que um conteúdo arbitrário seja lido ou gravado em qualquer lugar do sistema de arquivos que está sendo acessado. Isso geralmente permite que um invasor leia informações confidenciais do servidor e, em alguns casos, sobrescreva arquivos confidenciais, levando à execução arbitrária de comandos no servidor.

Considere o seguinte exemplo, onde um aplicativo de compras exibe imagens dos itens à venda:

https://www.example.com/item/getImage?filename=item.jpg

Quando o servidor processa essa solicitação ele segue as etapas:

Extrai o valor do parâmetro filename da string de consulta.Anexa esse valor a um prefixo de caminho (no linux seria alguma coisa como /var/www/images/).Abre o arquivo com este nome.Lê o conteúdo do arquivo e devolve ao cliente.

Para um aplicativo que não implementa providências contra ataques de Path Traversal um invasor pode solicitar a seguinte URL para recuperar um arquivo arbitrário do servidor:

https://www.example.com/item/getImage?filename=../../../etc/passwd

A sequência ../ é válida em um caminho de arquivo e significa avançar em um nível a estrutura de diretório. As três ../sequências consecutivas /var/www/images/avançam da raiz do sistema de arquivos e, portanto, o arquivo que é realmente lido é:

/etc/passwd

Em sistemas operacionais baseados em Unix, este é um arquivo padrão contendo detalhes dos usuários que estão registrados no servidor.

No Windows, ../e ..\são sequências de Path Traversal válidas, e um ataque equivalente para recuperar um arquivo de sistema operacional padrão seria:

https://www.example.com/item/getImage?filename=..\..\..\windows\win.ini

Neste exemplo simples, o aplicativo não implementa nenhuma defesa para evitar ataques de Directory Traversal. No entanto, como esses ataques são amplamente conhecidos há algum tempo, é comum encontrar aplicativos que implementam várias defesas contra eles, geralmente com base em filtros de validação de entrada.

As falhas de Path Traversal às vezes são sutis de detectar e muitos aplicativos da web implementam defesas contra elas que podem ser vulneráveis ​​a desvios.

Localização de alvos para ataque

Durante o mapeamento inicial do aplicativo, você já deve ter identificado todas as áreas óbvias da superfície de ataque em relação às vulnerabilidades de travessia de caminho.

Qualquer funcionalidade cujo propósito explícito seja o upload ou download de arquivos deve ser completamente testada. Essa funcionalidade é frequentemente encontrada em aplicativos de workflow, onde os usuários podem compartilhar documentos, em aplicativos de blog e leilão onde os usuários podem fazer upload de imagens e em aplicativos informativos onde os usuários podem recuperar documentos como PDFs, manuais e relatórios.

Além da funcionalidade de destino óbvia desse tipo, vários outros tipos de comportamento podem sugerir interação relevante com o sistema de arquivos.

Detectando vulnerabilidades de Directory Traversal

Tendo identificado os alvos potenciais para o teste de Path Traversal, é preciso testar cada instância individualmente para determinar se os dados controláveis pelo usuário estão sendo passados para operações relevantes do sistema de arquivos de maneira insegura.

Para cada parâmetro fornecido pelo usuário sendo testado, determine se as sequências de passagem estão sendo bloqueadas pelo aplicativo ou se funcionam conforme o esperado. Um teste inicial que geralmente é confiável é enviar sequências de travessia de uma forma que não envolva voltar atrás do diretório inicial.

Se foi encontrada qualquer instância em que o envio de sequências de travessia sem passar acima do diretório inicial não afete o comportamento do aplicativo, o próximo teste é tentar atravessar o diretório inicial e acessar arquivos de outro lugar no servidor.

Contornando os obstáculos a este tipo de ataque

Muitos aplicativos que colocam a entrada do usuário em paths de arquivo implementam algum tipo de defesa contra ataques de Path Traversal, e isso muitas vezes pode ser contornado.

Se um aplicativo remover ou bloquear as sequências de passagem de diretório do nome de arquivo fornecido pelo usuário, pode ser possível contornar a defesa usando uma variedade de técnicas.

Experimentar representações simples codificadas por URL de sequências de passagem usando as seguintes codificações. Lembrando de certificar-se de codificar cada ponto e barra da entrada:

Ponto —%2eBarra — %2fBarra invertida — %5c

Tentar usar a transformação Unicode em 16-bit:

Ponto — %u002eBarra — %u2215Barra invertida — %u2216

Tentar usar uma codificação dupla de URL:

Ponto — %252eBarra — %252fBarra invertida — %255c

Tentar uma transformação longa Unicode UTF-8:

Ponto — %c0%2e, %e0%40%ae, %c0ae e assim por dianteBarra — %c0%af, %e0%80%af, %c0%2f e assim por dianteBarra invertida — %c0%5c, %c0%80%5c e assim por diante

Se o aplicativo está tentando limpar a entrada do usuário removendo sequências de passagem e não aplica este filtro recursivamente, pode ser possível contornar o filtro colocando uma sequência dentro de outra. Por exemplo:

....//....\/..../\....\\

Tentar colocar um byte nulo codificado por URL no final do nome do arquivo solicitado, seguido por um tipo de arquivo que o aplicativo aceita. Por exemplo:

../../../etc/passwd%00.jpg

Explorando Path Traversal

Você pode explorar falhas de Directory Traversal que dão acesso de leitura para recuperar arquivos interessantes do servidor que podem conter informações diretamente úteis ou que ajudam a refinar os ataques contra outras vulnerabilidades. Por exemplo:

Arquivos de senha para o sistema operacional e aplicativo.Arquivos de configuração de servidor e aplicativo para descobrir outras vulnerabilidades ou ajustar um ataque diferente.Arquivos que podem conter credenciais de banco de dados.Fontes de dados usadas pelo aplicativo, como arquivos de banco de dados MySQL ou arquivos XML.O código-fonte para páginas executáveis ​​do servidor para realizar uma revisão de código em busca de bugs.Arquivos de log do aplicativo que podem conter nomes de usuário, tokens de sessão e semelhantes.

Se você encontrar uma vulnerabilidade de Directory Traversal que conceda acesso de gravação, seu objetivo principal deve ser explorá-la para obter a execução arbitrária de comandos no servidor (RCE). Aqui estão algumas maneiras de explorar esta vulnerabilidade:

Criar scripts nas pastas de inicialização dos usuários.Modificar arquivos como in.ftpd para executar comandos arbitrários na próxima conexão do usuário.Escrever scripts em um diretório da web com permissões de execução e chamá-los do seu navegador.

Segundo a OWASP (Open Web Application Security Project), algumas técnicas para se proteger desse tipo de vulnerabilidade são:

Preferir trabalhar sem intervenção do usuário ao usar chamadas do sistema de arquivos.Usar indexes em vez de pedaços reais de nomes de arquivo ao modelar ou usar arquivos de idioma (isto é, valor 5 do envio do usuário é igual a Checoslovaco, ao invés de esperar que o usuário retorne “Checoslovaco”).Certificar-se de que o usuário não pode fornecer todas as partes do caminho — coloque-o entre o seu path code.Validar a entrada do usuário aceitando apenas o que é bom conhecido — sem higienizar os dados.Usar chroot jails e políticas de acesso ao código para restringir onde os arquivos podem ser obtidos ou salvos.Se for forçado a usar a entrada do usuário para operações de arquivo, normalizar a entrada antes de usar APIs para consultar o arquivo, como normalize () .

The Web Application Hacker’s Handbook: Finding and Exploiting Security Flaws — Dafydd Stuttard, Marcus Pinto

Read Entire Article