Explorando o SSRF (Server-Side Request Forgery) em Aplicações Web
A vulnerabilidade Server-Side Request Forgery (SSRF) é amplamente explorada em cenários de Cyber Security, programas de bug bounty e desafios de CTF (Capture The Flag), permitindo que atacantes abusem de servidores vulneráveis para realizar requisições maliciosas em seu nome.
O que é o SSRF?
O SSRF (Server-side request forgery) é uma vulnerabilidade que ocorre quando aplicações web não validam corretamente URLs ou destinos de requisições externas, possibilitando o envio de solicitações para recursos internos da infraestrutura.
O SSRF é frequentemente utilizado para acessar serviços internos restritos, explorar APIs privadas e interagir com sistemas que aceitam apenas conexões da rede interna. Em cenários mais críticos, a exploração pode permitir leitura de arquivos sensíveis, enumeração de serviços internos, exfiltração de dados e até execução remota de comandos quando combinada com outras vulnerabilidades.
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
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!
