Posts

Path Traversal

O que Path Traversal?

Antes de começar a explicação é bom lembrar que path traversal também é conhecido como directory traversal, dot-dot-slash(../), directory climbing e backtracking.

A aplicação correta do controle de acesso ao conteúdo web é crucial para se ter um servidor web seguro. Path traversal é um exploit via HTTP que permite ao atacante acessar diretórios restritos e executar comandos fora do diretório no qual a aplicação web esteja rodando.

Os servidores web dispõem de 2 níveis de mecanismos de segurança que são considerados como principais:

– Access Control Lists (ACLs)
– Root directory

O acess control list é usado no processo de autorização. É uma lista usada pelo administrador do servidor web para indicar quais usuários ou grupos de usuários possuem autorização para acessar, modificar ou executar arquivos específicos no servidor web em questão, assim como outros direitos de acesso.

O diretório root é um diretório específico no sistema de arquivo do servidor onde os usuários ficam confinados. Os usuários não possuem autorização para acessar diretórios fora do diretório root(a não ser que o usuário tenha permissão para isso).

Por exemplo: por padrão o diretório root do IIS é  C:\Inetpub\wwwroot e com esta configuração, nenhum usuário tem acesso ao C:\Windows, mas terá acesso ao  C:\Inetpub\wwwroot\news e quaisquer outros diretórios ou arquivos que estejam dentro do diretório root(claro que isso vai depender se o usuário em questão foi autenticado através da ACLs)

O diretório root previne que usuários acessem arquivos sensíveis como o cmd.exe em ambiente Windows ou o arquivo passwd em ambientes Linux/UNIX.

Esta vulnerabilidade pode se manisfestar no próprio software do servidor web(apache, tomcat…) ou no código da aplicação web.

Para a realização do ataque, tudo que o atacante precisa é de um navegador web e um breve conhecimento do servidor web alvo ou da aplicação web alvo.

O que o atacante pode fazer caso a aplicação web seja vulnerável?

Se a aplicação web for vulnerável a path traversal, o atacante pode usar essa falha para sair do diretório root e com isso acessar outras partes do sistema de arquivo do servidor web. Isso pode permitir ao atacante acesso a arquivos restritos, ou até mesmo permitir que o atacante execute comandos no servidor web, o que pode levar ao comprometimento total do sistema. Dependendo como foi configurado o acesso a aplicação web, o atacante vai executar comandos se passando por um usuário legítimo da mesma. Claro que isso vai depender de quais privilégios de acesso os usuários da aplicação web possuem.

Exemplo de ataque Path Traversal na aplicação web

Em aplicações web com páginas dinâmicas, a entrada(input) geralmente é recebido pelo navegador, através dos métodos GET ou POST. Segue abaixo um exemplo de uma requisição através do método GET.

GET http://website.com/dirtrav/example1.php?file=hacker.png HTTP/1.1

Host: website.com

Com essa URL, o navegador faz a requisição da página dinâmica example1.php e ao mesmo tempo envia o parâmetro ” file ” juntamente com o valor hacker.png. Quando essa requisição é executada no servidor web, a página example1.php recupera o arquivo hacker.png do sistema de arquivo do servidor web, processa e depois envia de volta para o navegador que em seguida mostra o conteúdo para o usuário. O atacante irá assumir que example1.php consegue recuperar arquivos do sistema de arquivo do servidor web e então envia a seguinte URL modificada.

GET http://website.com/dirtrav/example1.php?file=../../../../../../../etc/passwd HTTP/1.1

Host: website.com

Essa requisição vai fazer com que a página dinâmica example1.php recupere o arquivo passwd do sistema de arquivo, e em seguida o navegador web irá exibir o conteúdo do arquivo passwd para o usuário. A expressão ” ../ ” instrui o sistema a subir um diretório, o que é uma diretiva(instrução) muito comum de ser usada no sistema operacional.

O atacante precisa adivinhar quantos diretórios ele(a) precisa subir para chegar no diretório etc/. Essa é uma tarefa muito fácil e a mesma é realizada por tentativa e erro.

Três exemplos práticos de como explorar o Path Traversal em uma aplicação web

Exemplo de ataque Path Traversal  no Servidor Web

Deixando um pouco de lado a aplicação web, até mesmo o servidor web pode estar vulnerável a ataques de path traversal. O problema pode estar incorporado no software do servidor web ou até mesmo dentro de scripts de amostra que estão disponíveis no servidor web em questão.

Por exemplo, a requisição a seguir consegue explorar o path traversal através da utilização de scripts de diretório do IIS:

GET http://website.com/scripts/..%5c../Windows/System32/cmd.exe?/c+dir+c:\ HTTP/1.1

Host: website.com

A requisição acima vai retornar para o usuário a lista de todos os arquivos presentes no diretório C:\ através da execução do comando dir c:\ dentro do cmd.exe. A expressão %5c que aparece na URL é um código de escape do servidor web, que é usado para representar caracteres normais. Nesse caso o %5c representa o carácter ” \ “.

Os servidores web modernos verificam a existência desse código de escape na requisição feita pelo usuário e o elimina. Versões mais antigas dos servidores web não realizam esse filtro e por isso acabam sendo vulneráveis a path traversal.

Como previnir Path Traversal?

Em relação ao servidor web tenha certeza que o mesmo esteja sempre atualizado. Já em relação a aplicação web filtre toda e qualquer entrada do usuário(user input).

______________________________

Preocupado(a) se sua empresa pode estar correndo esse risco? Entre em contato agora mesmo

[CONTACT_FORM_TO_EMAIL id=”1″]