O que é Spring Boot Actuator e suas vulnerabilidades

Picture of Júlia Valim

Júlia Valim

Spring Boot Actuator

O que é Spring Boot Actuator?

O Spring Boot Actuator é uma ferramenta de monitoramento e métricas utilizada por aplicações Java, sendo que parte do ecossistema do Spring é encontrado em 60% das aplicações em nuvem. Sua funcionalidade é fornecer informações importantes da aplicação, como: monitoramento, saúde, métricas, exposição de endpoints, podendo até alertar no caso de lentidão ou de alguma funcionalidade não funcionar como deveria.

Spring Boot Actuator

Figura: Spring Boot Actuator.

Por que o Actuator pode ser um alvo para atacantes?

Caso o Actuactor apresente configurações incorretas, ele se torna vulnerável a expor informações da aplicação para atacantes externos.

Estudos indicam que aproximadamente 60% dos ambientes em nuvem utilizam o Spring Boot Actuator, dos quais 11% estão expostos publicamente. Desses 11%, cerca de 24% apresentam configurações inadequadas.

Configurações incorretas do Spring Boot Actuator

Figura: Configurações incorretas

Funcionalidades que podem estar expostas

  • /heapdump – exibe despejos de memória (heap dumps) que podem conter dados sensíveis, como credenciais de banco de dados
  • /threadump – exibe despejos de threads, incluindo o rastreamento de pilha (stack trace)
  • /trace – exibe as últimas mensagens HTTP, que podem incluir identificadores de sessão
  • /logfile – exibe o conteúdo dos logs da aplicação, que pode conter detalhes de depuração ou outras informações não públicas
  • /shutdown – desliga a aplicação
  • /mappings – exibe todos os mapeamentos dos controladores MVC
  • /env – fornece acesso ao ambiente de configuração
  • /restart – reinicia a aplicação
  • /health – exibe informações da saúde da aplicação
  • /conditions –exibe as condições de inicialização da aplicação, incluindo o estado dos beans e a configuração do Spring.
  • /prometheus – exibe métricas, porém em um formato para um servidor Prometheus

Encontrar endpoints

wordlist são muito utilizados para encontrar endpoints do Actuator de maneira mais rápida e fácil.

Utilizando a ferramenta ffuf, podemos rodar a wordlist com o seguinte comando:

ffuf -u https://example.com/FUZZ -w seclists/Discovery/Web-Content/spring-boot.txt

Onde:

  • -u = domínio que deseja realizar a busca
  • -w = wordlist que irá utilizar

Arquivo HeapDump exposto

O endpoint heapdump do Spring Boot Actuator foi projetado para capturar o estado atual da memória heap do Java, o que torna essa uma ferramenta útil para diagnosticar problemas de memória. No entanto, se informações sensíveis, como senhas, tokens, chaves de nuvem ou outros dados confidenciais, forem carregadas na memória da JVM durante a execução da aplicação, elas podem ser incluídas no heap dump.

Portanto, se esse endpoint for configurado de maneira incorreta, para ser acessível publicamente, ele pode expor essas informações sigilosas para usuários não autorizados.

Até a versão 1.5 (lançada em 2017), o endpoint /heapdump do Spring Boot Actuator era exposto publicamente e acessível sem autenticação por padrão. A partir das versões seguintes, o Spring Boot Actuator alterou sua configuração padrão para expor apenas os endpoints /health e /info sem autenticação.

No entanto, muitos desenvolvedores desativam essas medidas de segurança em ambientes de teste para facilitar o diagnóstico. Esse pequeno ajuste de configuração pode passar despercebido e continuar presente quando a aplicação é implantada em produção, permitindo, assim, que atacantes acessem dados críticos de forma não autorizada.

Obter o heapdump do Spring Boot Actuator é muito simples – basta enviar uma requisição HTTP GET para /actuator/heapdump ou /heapdump.

Exposição do endpoint env

A exposição do endpoint /actuator/env é uma configuração inadequada bem conhecida que pode afetar diversas plataformas. No Spring Boot Actuator, o endpoint /actuator/env foi criado para fornecer detalhes sobre o ambiente de execução da aplicação.

Ao acessar esse endpoint, ele retorna uma resposta estruturada em JSON, exibindo propriedades de configuração e variáveis de ambiente usadas pela aplicação.

Isso pode incluir valores de diversas fontes, como variáveis de ambiente do sistema, propriedades da aplicação e fontes externas de configuração. Como resultado, pode expor informações sensíveis, como credenciais de banco de dados, chaves de API ou tokens, e chaves de nuvem.

Até a versão 1.5 do Spring Boot, esse endpoint era exposto publicamente sem autenticação por padrão, o que representava um risco de segurança.

Além dos riscos críticos associados aos endpoints /heapdump, /env e /gateway/routes, é importante reconhecer que outros endpoints do Spring Boot Actuator, como /metrics, /threaddump e /scheduledtasks, também podem expor dados sensíveis que poderiam ser valiosos para atacantes. Para proteger sua aplicação, é recomendado limitar o acesso aos endpoints do Actuator e garantir que esses endpoints não sejam expostos publicamente sem autenticação, a menos que seja estritamente necessário.

Exemplo prático

Para iniciarmos, podemos fazer uma busca dentro do Shodan a fim de encontrar hosts que possuem este serviço ativo, para isso podemos realizar a seguinte querie:

http.favicon.hash:116323821

Shodan

Figura: Shodan

Com os hosts, podemos realizar uma busca por diretórios dentro do nosso alvo. Para isso temos algumas maneiras de fazer, sendo elas: ffuf ou Nuclei, e a principal diferença entre ambas é que com a ferramenta Nuclei essa busca será mais abrangente, demonstrando também outros possíveis pontos de interesse, enquanto com o ffuf é mais direcionado.

Com o Nuclei utilizamos o seguinte comando:

nuclei -u https://alvo.com.br

Caso for uma lista de alvos:

nuclei -l lista.txt

Podemos utilizar também o nuclei com a opção -w para rodar um teste com workflows, os quais são basicamente os testes de algo específico. Neste caso o Spring Boot, basta:

nuclei -u https://alvo.com.br -w /caminho_para_templates/springboot-workflow.yaml

Desta maneira ele irá enumerar de maneira automatizada caso haja endpoints com o Spring Boot, como é possível visualizar na imagem:

Scan com Nuclei

Figura: Scan com Nuclei

Com os diretórios enumerados, vamos dar início a exploração, primeiro iremos acessar aos endpoints encontrados.

/env no Spring Boot Actuator

Figura: /env

/health no Spring Boot Actuator

Figura: /health

/conditions no Spring Boot Actuator

Figura: /conditions

Podemos verificar também que o headpdump se encontra aberto, o que pode levar a diversas vulnerabilidades como Account Takeover, uma vez que esse arquivo possui informações sobre a máquina virtual Java, levando a vazamento de credenciais admin, tokens de usuários e uma combinação de outros dados.

/heapdump no Spring Boot Actuator

Figura: /heapdump

Para conseguirmos obter as informações dos arquivos heapdump, primeiro devemos usar o comando strings e criar um arquivo novo:

string.txt no Spring Boot Actuator

Figura: string.txt

Com o arquivo string.txt, agora podemos utilizar o grep para buscarmos informações sensíveis dentro da aplicação.

Chaves API

Figura: Chaves API

Buscar consultas SQL:

Select

Figura: Select

Consulta SQL

Figura: Consulta SQL

Em nossa experiência, ao analisarmos arquivos heapdump, identificamos informações sensíveis, como:

  •   Tokens de acesso
  •   Chaves de API
  •   Credenciais de usuários válidos da aplicação

Esses achados evidenciam a criticidade dos arquivos heapdump, sobretudo quando estão disponíveis publicamente.

Agora iremos demonstrar na prática como realizar a enumeração utilizando a ferramenta ffuf:

Scan com ffuf

Figura: Scan com ffuf

Diretórios encontrados

Figura: Diretórios encontrados

Dessa maneira conseguimos encontrar alguns endpoints como com o nuclei, porém temos a vantagem de poder utilizar uma wordlist personalizada com endpoints que talvez o nuclei por padrão não identifique.

Tornando o Actuator mais seguro

Confira alguns passos para garantir que sua aplicação com Spring Boot fique mais segura:

  1. Garanta a autenticação e autorização adequadas

Garanta que os endpoints sensíveis do Spring Boot Actuator, como heapdump, gateway e env, sejam protegidos por mecanismos adequados de autenticação e autorização.

Para impor a autenticação, use o Spring Security

Para restringir o acesso a endpoints sensíveis, edite o arquivo application.properties para desabilitar e excluir endpoints sensíveis:

management.endpoints.web.exposure.exclude=heapdump,env,gateway  

management.endpoint.heapdump.enabled=false  

management.endpoint.env.enabled=false  

management.endpoint.gateway.enabled=false

Remoção exposição

Figura: Remoção exposição

Agora quando acessado os endpoints, a aplicação não retorna nada.

/env

Figura: /env

  1. Reduza endpoints expostos

Se o Spring Boot Actuator for exposto publicamente à internet, minimize a exposição e permita que apenas endereços IP autorizados o acessem.

Caso a configuração do “management.endpoints.web.exposure” se encontre da seguinte maneira:

application.properties

Figura: application.properties

Significa que todos os endpoints estão expostos, trazendo risco para a aplicação. Uma boa prática seria habilitar somente os estritamente necessários (incluindo os nomes no lugar do “*”) ou pedir autenticação para acessar o endpoint.

  1. Spring Security

Para adicionar o Spring Security basta adicionar a seguinte dependência no arquivo pom.xml:

<dependency>

               <groupId>org.springframework.boot</groupId>

               <artifactId>spring-boot-starter-security</artifactId>

</dependency>

Dependência

Figura: Dependência

Ainda no arquivo application.properties, iremos adicionar um usuário e senha para se autenticar quando requerido, basta adicionar:

spring.security.user.name=teste

spring.security.user.password=teste

Usuário

Figura: Usuário

Agora quando acessado a aplicação, é requerido um login:

Login no Spring Boot Actuator

Figura: Login

  1. Siga as melhores práticas

Mantenha o Spring Boot Actuator e suas bibliotecas associadas atualizadas, garanta que os recursos de segurança mais recentes estejam habilitados e imponha configurações padrão seguras.

Referências

53. Endpoints

Perils of Spring Boot Actuators Misconfiguration

SecLists

Under the Radar: Exploring Spring Boot Actuator Misconfigurations

A Comprehensive Guide to Spring Boot Actuator

Spring Boot Actuator Endpoints

Créditos

Arthur Martins

veja também

Outros conteúdos sobre Segurança Cibernética