通过补丁分析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参数解析过程中对@符号的处理不当:

  1. 参数解析流程

    • CLI参数传入main函数
    • 调用parseArgument()进行解析
    • 最终进入expandAtFiles()函数处理
  2. 关键问题函数 - expandAtFiles()

    if (参数以@开头) {
        将@后面的内容作为文件路径创建File对象;
        读取该文件内容;
        将内容添加至result中返回;
    }
    
  3. 攻击向量
    由于CLI参数完全可控,攻击者可以构造以@开头的参数指向任意文件路径。

3.2 漏洞利用条件

  • 未认证场景:可以读取部分文件的有限行内容
  • 认证后场景(或目标Jenkins更改了默认"Security"配置):可以读取任意文件
  • 进一步利用:结合其他功能可能导致任意代码执行

4. 漏洞复现

4.1 复现环境

  • 受影响版本的Jenkins(<2.442或LTS<2.426.3)
  • Jenkins CLI工具(jenkins-cli.jar)

4.2 复现步骤

  1. 使用Jenkins CLI工具连接目标服务器

  2. 执行以下命令读取敏感文件(如master.key):

    java -jar jenkins-cli.jar -s http://目标服务器/ who-am-i @/var/jenkins_home/secrets/master.key
    
  3. 观察返回结果中包含目标文件内容

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 临时缓解措施

  1. 使用官方提供的脚本:

    • 删除CLI HTTP端点
    • 禁用SSH端口
    • 脚本地址:https://github.com/jenkinsci-cert/SECURITY-3314-3315
  2. 网络层面:

    • 限制对Jenkins控制器的网络访问
    • 禁用不必要的CLI功能

6. 漏洞影响评估

6.1 直接影响

  • 敏感信息泄露(凭据、配置等)
  • 可能导致系统完全沦陷

6.2 潜在风险

  • 结合其他漏洞可能导致RCE
  • 破坏CI/CD流程完整性
  • 供应链攻击入口点

7. 参考资源

  1. 官方公告:Jenkins Security Advisory
  2. 补丁分析:GitHub提交记录
  3. 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

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() 函数处理 关键问题函数 - expandAtFiles() : 攻击向量 : 由于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): 观察返回结果中包含目标文件内容 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