Jenkins Arbitrary File Read to RCE via "Remember Me"
In diesem Blogbeitrag ist es möglich, einen großartigen Weg zu finden, um eine Local File Inclusion-Schwachstelle 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 missbraucht wird, um RCE zu erhalten, indem ein lokales Datei-Lesen ausgenutzt wird, bis ich Zeit habe, eine eigene Zusammenfassung zu erstellen:
Angriffsvoraussetzungen
Funktionsanforderung: "Remember me" muss aktiviert sein (Standard-Einstellung).
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
Greife auf die Benutzerkonfiguration und Geheimnisse aus
$JENKINS_HOME/users/*.xml
für jeden Benutzer zu, um Folgendes zu sammeln:Benutzername
Benutzer-Seed
Zeitstempel
Passwort-Hash
Geheimschlüssel-Extraktion
Extrahiere 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
Berechne die Token-Ablaufzeit:
Verknüpfe Daten für das Token:
MAC-Schlüsselentschlüsselung
Entschlüssele die MAC-Schlüsseldatei:
Signaturberechnung
Berechne HMAC SHA256:
Cookie-Codierung
Generiere das endgültige Cookie:
Schritt 3: Codeausführung
Sitzungsauthentifizierung
Abrufen von CSRF- und Sitzungstoken:
Mache eine Anfrage an
/crumbIssuer/api/json
, umJenkins-Crumb
zu erhalten.Erfasse
JSESSIONID
aus der Antwort, die zusammen mit dem Remember-Me-Cookie verwendet wird.
Befehlsausführungsanfrage
Sende eine POST-Anfrage mit Groovy-Skript:
Groovy-Skript kann verwendet werden, um systemweite Befehle oder andere Operationen innerhalb der Jenkins-Umgebung auszuführen.
Das bereitgestellte Beispiel für den curl-Befehl zeigt, wie man eine Anfrage an Jenkins mit den erforderlichen Headern und Cookies sendet, um beliebigen Code sicher auszuführen.
Last updated