cve-2024-23897-crumb.py — 针对 Jenkins <= 2.441 / LTS <= 2.426.2(已在 2.442 / LTS 2.426.3 中修复)的未认证任意文件读取漏洞。
广泛使用的 PoC — exploit-db 51993、 xaitax/CVE-2024-23897 以及 ProjectDiscovery nuclei 模板 — 均为仅 HTTP 且不发送 CSRF crumb。当目标 Jenkins 实例满足以下条件时:
它们会以 403 No valid crumb was included in the request 失败,这与“已修补”状态无法区分,从而产生误报为安全的结果。
本变体:
--http 使用纯 HTTP);/cli 错误页面获取可用的 CSRF crumb + 匹配的 JSESSIONID,然后在双工通道上重放;最终效果:能够检测并利用那些已加固但未修补、而公开工具报告为安全的实例。
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
仅依赖 Python 3 标准库。只读操作:发送 help "@<file>";不会写入、上传或执行任何内容。
help 会回显文件的首行内容 — 即 Too many arguments: 消息中的第一行,以及 (default: ...) 字段中的后续行。对于首行包含多个字段或内容较长的文件效果良好:
/etc/passwd、/etc/shells/proc/net/arp、/proc/net/route(内部 IP、网关、MAC 地址)/proc/mounts(容器/存储布局)首行非常短的文件(例如 /etc/hostname)会落入认证错误路径,无法通过 help 返回任何内容。整文件提取改用 connect-node 命令,但这要求匿名用户拥有 Overall/Read 权限 — 通常不会授予,此时读取原语仍然有效,但只能返回首行内容。
仅将其指向你已获授权测试的主机。同一通道会暴露可改变状态的 CLI 命令(enable-job、reload-configuration 等);本脚本刻意仅使用只读的 help 路径。