Explorando o SSRF ( Server-side Request Forgery)

Explorando o SSRF ( Server-side Request Forgery)

O Server-side request forgery (mais conhecido como SSRF) é uma vulnerabilidade muito encontrada em programas de bug bounty, e atualmente está inclusa no OWASP Api Security TOP 10.

O que é o SSRF?

O SSRF (Server-side request forgery) é uma vulnerabilidade que permite com que o atacante envie requisições utilizando o servidor em que a aplicação está hospedada.

Na maioria das vezes, o SSRF é utilizado para acessar serviços internos ou aplicações que aceitam apenas conexões da rede interna. Em alguns cenários, o SSRF pode ser muito prejudicial, permitindo com que o atacante consiga ler arquivos ou executar comandos no servidor.

Como ocorre o SSRF?

O SSRF normalmente é encontrado em cenários que solicitam uma URL para o usuário, que seja para download de uma imagem, ou para verificar se um site está funcionando, etc...

O motivo do SSRF normalmente ser encontrado nesses cenários, é porque são "endpoints" que enviam uma requisição para a URL inserida pelo usuário.

Explorando o SSRF

No hackingclub tem diversas máquinas que apresentam o SSRF em uma de suas vulnerabilidades. Para a demonstração da vulnerabilidade, estaremos utilizando a máquina "Rain".

Em uma das etapas dessa máquina, temos que explorar o SSRF em uma página que checa URLs:

Para verificarmos se essa aplicação está realizando uma requisição, podemos subir um webserver utilizando o python3 e especificarmos a URL do nosso servidor para a aplicação:

Vemos que a aplicação realizou a requisição para a URL inserida.

Com o poder de realizar requisições do lado do servidor, podemos tentar acessar serviços da rede interna ou ler arquivos do sistema utilizando o schema "file". Ao tentar realizar uma requisição HTTP para "localhost:3306", recebemos a seguinte resposta:

O serviço que se hospeda na porta 3306 é o MySQL, então se acessarmos ele utilizando o protocolo HTTP, receberemos essa mensagem de erro. Isso já foi o suficiente para validar que temos acesso a serviços internos da rede.

Outro teste que podemos fazer é, verificar se conseguimos ler arquivos do servidor utilizando o schema "file". Para utilizar esse schema, precisamos especificar o caminho do arquivo depois de "file://", sendo assim, se quisermos ler o arquivo "/etc/passwd", precisamos especificar: "file:///etc/passwd".

Veja na imagem acima que conseguimos ler o arquivo: "/etc/hosts". Com o poder de ler arquivos do servidor, podemos ler arquivos que contém credenciais de autenticação ou arquivos de configuração. Nessa máquina conseguimos ler o arquivo de configuração do redis e obter a credencial para nos autenticar:

Filtrando por "requirepass" no arquivo, encontramos a senha para autenticar no redis:

Impacto

Através de um SSRF, conseguimos ler os arquivos do servidor e obter uma credencial para autenticação no redis. Já imaginou o quão prejudicial isso é? Com essa vulnerabilidade, um atacante poderia ler arquivos do servidor que contém credenciais para entrar no banco de dados, ou para acessar o SSH de algum usuário no servidor.

Como protegemos uma aplicação contra o SSRF?

Para protegermos as nossas aplicações contra o SSRF, sempre precisamos validar a URL inserida pelo usuário. Devemos verificar se a URL começa com http ou https, caso contrario bloquear a requisição. Outra condição que precisamos criar é, se o host especificado na URL aponta para o localhost.

Existem diversos bypass de filtros para SSRF, que consistem em criar endereços IPs em hexadecimal, ou IPv6, que apontam para o localhost. Por isso é importante fazer a resolução do host para verificar se estão apontando para o localhost.

Referências

API-Security/0xa6-server-side-request-forgery.md at master · OWASP/API-Security
OWASP API Security Project. Contribute to OWASP/API-Security development by creating an account on GitHub.
Server Side Request Forgery | OWASP Foundation
Server Side Request Forgery on the main website for The OWASP Foundation. OWASP is a nonprofit foundation that works to improve the security of software.

Onde praticar Hacking ?

O Hacking Club é uma plataforma de treinamento em cybersecurity, que permite você aprender hacking de forma totalmente prática.

Temos mais de 50 ambientes com vulnerabilidades reais com write-ups para você treinar e aprender hacking. Semanalmente lançamos máquinas gratuitas para você praticar e se desafiar no hacking!