Selam dostlar, bugün biraz eski ama hâlâ iş gören bir konuya değinmek istedim. Spring Framework'teki o meşhur classloader manipülasyonu üzerinden nasıl RCE yapıldığını, adım adım ve olabildiğince teknik şekilde anlatacağım. Lab ortamında test ettim, production'da benzer konfigürasyonlar hâlâ karşımıza çıkabiliyor.
Öncelikle zafiyetin temelinde ne var kısaca hatırlayalım: Tomcat'in varsayılan classloader'ını kötüye kullanarak yeni bir property ekleyip, Tomcat'in logging class'ını değiştiriyoruz. Sonra da o class'ın içine istediğimiz komutu yerleştiriyoruz. Oldukça klasik ama etkili bir yol.
Bu payload'ı gönderdikten sonra Tomcat'in logging ayarlarını bozuyoruz ve ikinci istekle de shell'i tetikliyoruz. Tabii ki gerçek senaryoda WAF'ler ve input sanitization'lar işin içine giriyor, bu yüzden biraz obfuscation ve farklı header kombinasyonları denemek gerekiyor.
Sömürü sırasında dikkat edilmesi gereken birkaç nokta var:
- JDK versiyonu 9 ve üstü olmalı
- spring-webmvc ve tomcat-embed-core versiyonları belirli aralıklarda olmalı
- Güvenlik duvarı kurallarını aşmak için reverse shell yerine DNS exfiltration da tercih edilebiliyor
Eğer benzer bir ortamda test yapıyorsan, önce actuator endpoint'lerini kontrol etmeni öneririm. Bazen /actuator/env üzerinden direkt property injection yapmak daha temiz sonuç veriyor.
Öncelikle zafiyetin temelinde ne var kısaca hatırlayalım: Tomcat'in varsayılan classloader'ını kötüye kullanarak yeni bir property ekleyip, Tomcat'in logging class'ını değiştiriyoruz. Sonra da o class'ın içine istediğimiz komutu yerleştiriyoruz. Oldukça klasik ama etkili bir yol.
Hidden content - for more
Konuyu Görebilmeniz için "Beğenmeniz ve Yorum yapmaniz" Gerekir.
Sömürü sırasında dikkat edilmesi gereken birkaç nokta var:
- JDK versiyonu 9 ve üstü olmalı
- spring-webmvc ve tomcat-embed-core versiyonları belirli aralıklarda olmalı
- Güvenlik duvarı kurallarını aşmak için reverse shell yerine DNS exfiltration da tercih edilebiliyor
Eğer benzer bir ortamda test yapıyorsan, önce actuator endpoint'lerini kontrol etmeni öneririm. Bazen /actuator/env üzerinden direkt property injection yapmak daha temiz sonuç veriyor.
Bu içeriği görmek için giriş yapın.