通过补丁分析Jenkins任意文件读取漏洞(CVE-2024-23897)

通过补丁分析Jenkins任意文件读取漏洞(CVE-2024-23897)

jweny 白帽子左一 2024-04-13 12:03

扫码领资料

获网安教程

文章来源: https://forum.butian.net/share/2752
文章作者:jweny
如有侵权请您联系我们,我们会进行删除并致歉

通过补丁分析Jenkins任意文件读取漏洞(CVE-2024-23897)

漏洞描述

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。Jenkins 有一个内置的命令行界面(CLI),可从脚本或 shell 环境访问 Jenkins。处理 CLI 命令时, Jenkins 使用args4j库解析 Jenkins 控制器上的命令参数和选项。

Jenkins处理CLI命令的命令解析器中的expandAtFile功能存在任意文件读取漏洞,未经身份认证的远程攻击者利用该漏洞可以读取部分文件的有限行内容,攻击者经过身份验证或目标Jenkins更改了默认”Security”配置可以通过该漏洞读取任意文件,攻击者进一步利用该漏洞并结合其他功能可能导致任意代码执行。

漏洞分析

该漏洞成因比较简单。通过补丁可以发现,主要是对CLICommand.java文件做了修改。

跟进该文件,可以发现在main函数中,把CLI的参数传入了parseArgument()函数进行解析

继续跟进

继续跟进到expandAtFiles()函数后,可以发现,如果参数以@开头,那么将会把@后面的内容当作路径,建立一个File对象,并且会读取该文件的内容,并添加至result中返回。

而CLI参数可控,所以通过以下命令即可读取Jenkins中的master.key文件

java -jar jenkins-cli.jar -s http://localhost:9095/ who-am-i @/var/jenkins_home/secrets/master.key

漏洞复现

通过CLI工具读取目标服务器上的master.key文件

java -jar jenkins-cli.jar -s http://localhost:9095/ who-am-i @/var/jenkins_home/secrets/master.key

处置建议

  • 使用https://github.com/jenkinsci-cert/SECURITY-3314-3315中的脚本删除CLI HTTP端点和禁用SSH端口

  • 目前官方已有可更新版本,建议受影响用户升级至: Jenkins >= 2.442 或Jenkins LTS >= 2.426.3。下载链接:https://www.jenkins.io/download/

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前言漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,只需25,即可加入,如不满意,72 小时内可在 App 内无条件自助退款。