通过补丁分析Jenkins任意文件读取漏洞(CVE-2024-23897)
字数 1484 2025-08-18 11:36:36
Jenkins任意文件读取漏洞分析(CVE-2024-23897)技术文档
1. 漏洞概述
漏洞编号:CVE-2024-23897
影响产品:Jenkins持续集成工具
漏洞类型:任意文件读取
威胁等级:高危
影响版本:Jenkins < 2.442 和 Jenkins LTS < 2.426.3
漏洞状态:官方已发布修复版本
2. 漏洞描述
Jenkins是一个基于Java开发的开源持续集成工具。该漏洞存在于Jenkins内置的命令行界面(CLI)功能中,具体问题出在CLI命令解析器的expandAtFile功能实现上。
当处理CLI命令时,Jenkins使用args4j库解析命令参数和选项。攻击者可以通过特制的CLI参数利用此漏洞读取Jenkins服务器上的任意文件内容。
3. 技术分析
3.1 漏洞成因
漏洞的根本原因在于CLI参数解析过程中对@符号的处理不当:
-
参数解析流程:
- CLI参数传入
main函数 - 调用
parseArgument()进行解析 - 最终进入
expandAtFiles()函数处理
- CLI参数传入
-
关键问题函数 -
expandAtFiles():if (参数以@开头) { 将@后面的内容作为文件路径创建File对象; 读取该文件内容; 将内容添加至result中返回; } -
攻击向量:
由于CLI参数完全可控,攻击者可以构造以@开头的参数指向任意文件路径。
3.2 漏洞利用条件
- 未认证场景:可以读取部分文件的有限行内容
- 认证后场景(或目标Jenkins更改了默认"Security"配置):可以读取任意文件
- 进一步利用:结合其他功能可能导致任意代码执行
4. 漏洞复现
4.1 复现环境
- 受影响版本的Jenkins(<2.442或LTS<2.426.3)
- Jenkins CLI工具(jenkins-cli.jar)
4.2 复现步骤
-
使用Jenkins CLI工具连接目标服务器
-
执行以下命令读取敏感文件(如master.key):
java -jar jenkins-cli.jar -s http://目标服务器/ who-am-i @/var/jenkins_home/secrets/master.key -
观察返回结果中包含目标文件内容
4.3 典型可读取文件
/var/jenkins_home/secrets/master.key/etc/passwd- 其他系统敏感文件
5. 修复方案
5.1 官方修复
升级至安全版本:
- Jenkins >= 2.442
- Jenkins LTS >= 2.426.3
下载地址:https://www.jenkins.io/download/
5.2 临时缓解措施
-
使用官方提供的脚本:
- 删除CLI HTTP端点
- 禁用SSH端口
- 脚本地址:https://github.com/jenkinsci-cert/SECURITY-3314-3315
-
网络层面:
- 限制对Jenkins控制器的网络访问
- 禁用不必要的CLI功能
6. 漏洞影响评估
6.1 直接影响
- 敏感信息泄露(凭据、配置等)
- 可能导致系统完全沦陷
6.2 潜在风险
- 结合其他漏洞可能导致RCE
- 破坏CI/CD流程完整性
- 供应链攻击入口点
7. 参考资源
- 官方公告:Jenkins Security Advisory
- 补丁分析:GitHub提交记录
- CVE详情:https://nvd.nist.gov/vuln/detail/CVE-2024-23897
8. 附录
8.1 相关技术点
- Jenkins CLI工作原理
- args4j库参数解析机制
- Java文件读取安全实践
8.2 检测方法
- 版本检查
- 补丁验证
- 流量分析(检测可疑的CLI请求)
文档版本:1.0
最后更新:2024-01-26
作者:Le1a@threatbook
校验:jweny@threatbook