
Exploit de lectura arbitraria de archivos sin autenticación para Jenkins CVE-2024-23897, con soporte para HTTPS y CSRF-crumb para evadir instancias reforzadas.
cve-2024-23897-crumb.py — lectura arbitraria de archivos sin autenticación contra
Jenkins <= 2.441 / LTS <= 2.426.2 (corregido en 2.442 / LTS 2.426.3).
Los PoC ampliamente utilizados — exploit-db 51993, xaitax/CVE-2024-23897, y la plantilla nuclei de ProjectDiscovery — son solo HTTP y no envían ninguna CSRF crumb. Contra una instancia de Jenkins que:
fallan con 403 No valid crumb was included in the request, lo cual es
indistinguible de "parcheado" y produce un falso negativo.
Esta variante:
--httpJSESSIONID correspondiente de la página
de error /cli sin autenticación, y luego los reproduce en el canal dúplex;Efecto neto: detecta y explota instancias endurecidas pero sin parchear que las herramientas públicas reportan como seguras.
python3 cve-2024-23897-crumb.py <host> [file] [--http] [--port N]
python3 cve-2024-23897-crumb.py jenkins.example.com
python3 cve-2024-23897-crumb.py jenkins.example.com /etc/shells
python3 cve-2024-23897-crumb.py 10.0.0.5 /etc/passwd --http --port 8080
Solo biblioteca estándar de Python 3. Solo lectura: envía help "@<file>"; nada se
escribe, sube o ejecuta.
help devuelve la(s) primera(s) línea(s) de un archivo — la primera línea en el
mensaje Too many arguments: más las líneas siguientes en el campo (default: ...).
Funciona bien en archivos cuya primera línea contiene varios campos o es larga:
/etc/passwd, /etc/shells/proc/net/arp, /proc/net/route (IPs internas, puerta de enlace, MACs)/proc/mounts (disposición de contenedores/almacenamiento)Los archivos con una primera línea muy corta (p. ej. /etc/hostname) caen en una
ruta de error de autenticación y no devuelven nada mediante help. La extracción de
archivos completos usa el comando connect-node en su lugar, pero eso requiere que
el usuario anónimo tenga Overall/Read — a menudo no concedido, en cuyo caso la
primitiva de lectura sigue funcionando pero solo se recuperan las primeras líneas.
Apúntalo solo a hosts que estés autorizado a probar. El mismo canal expone
comandos CLI que cambian el estado (enable-job, reload-configuration, …); este
script utiliza deliberadamente solo la ruta de solo lectura help.