CVE-2017-3506 & 10271:Weblogic 远程代码执行漏洞分析及复现笔记

CVE-2017-3506 & 10271:Weblogic 远程代码执行漏洞分析及复现笔记

0x00 前言

几天前,国内外的几家安全厂商都在陆续跟进这个漏洞。我本人并不擅长Java相关的安全问题,但看到近年来无论是Struts2、Spring还是weblogic这些都相继曝出过高危漏洞。便想着跟着分析一波,学习下。分析下漏洞的原理,有句古话说的好,谋上者居其中,谋中者居其下。那着挖0day的心,把漏洞分析清楚了,最后哪怕没有0day,但是可以根据漏洞补丁分析出漏洞成因,根据exploit可以稳准狠的搞定目标服务器,也算是一种收获吧。

如果你也正在分析这个漏洞,并且恰好看到了这篇文章,希望你看了这篇文章后能有所收获,同时如有谬误,还请不吝赐教。

0x01 基础环境

WebLogic 10.3.6.0

Windows 7 x64

JDK 1.8.0_144

PoC

JD-GUI

作为一个新玩家,要想分析一个漏洞,两样东西是必不可少的,1个是存在漏洞的环境(用于还原漏洞现场),另1个是相应的PoC。

WebLogic 10.3.6.0下载地址:oracle.com/technetwork/

0x02 漏洞复现

这里直接拿指尖安全的Bearcat师傅给我的exploit做演示了,感谢Bearcat师傅对我的帮助。

0x03 漏洞分析

漏洞分析部分安全客的大佬已经在几天前分析清楚了,我这边主要是跟一下流程,顺便膜拜一发。

漏洞触发位置:wls-wsat.war

漏洞触发URL:/wls-wsat/CoordinatorPortType(POST)

漏洞的本质:构造SOAP(XML)格式的请求,在解析的过程中导致XMLDecoder反序列化漏洞

反编译weblogic.jar包

由于该项目并不是开源项目,所以需要将weblogic.jar包,反编译后分析源码。这里我使用JD-GUI进行反编译。

分析漏洞调用链

weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest

weblogic.wsee.jaxws.workcontext.WorkContextTube.readHeaderOld

weblogic.wsee.workarea.WorkContextXmlInputAdapter

先看一下weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest方法

第43行,将localHeader1变量带入到readHeaderOld()方法中。localHeader1变量由第41行定义,其值为<work:WorkContext> </work:WorkContext> 标签包裹的数据。

    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">  
      <java> 
...
      </java> 
    </work:WorkContext> 

跟进readHeaderOld()方法(weblogic.wsee.jaxws.workcontext.WorkContextTube.readHeaderOld)

在106行,有一句new WorkContextXmlInputAdapter(new ByteArrayInputStream(localByteArrayOutputStream.toByteArray())),创建了WorkContextXmlInputAdapter()对象(即对WorkContextXmlInputAdapter类进行了实例化),带入构造函数的参数即为传入的XML格式序列化数据。

跟进至WorkContextXmlInputAdapter类中(weblogic.wsee.workarea.WorkContextXmlInputAdapter )

第19行,此处通过XMLDecoder反序列化,输入内容可控,故漏洞产生。

0x04 后记

关于影响版本、修复建议等更多详细内容可以在参考链接中获取,这里就不一一赘述了。

利用下午的时间和晓瑞师傅分析了下这个漏洞,从最初的环境搭建到复现分析,收获很多。

感谢xxlegend师傅、tomato师傅、Bearcat师傅、晓瑞师傅的帮助。

0x05 参考链接

【漏洞预警】Oracle WebLogic wls-wsat RCE CVE-2017-10271 & CVE-2017-3506

安全客 - 有思想的安全新媒体

Weblogic XMLDecoder RCE分析

Weblogic下载安装以及部署 - CSDN博客

Tom4t0/Tom4t0.github.io

Using XMLDecoder to execute server-side Java Code on an Restlet application (i.e. Remote Command Execution)

编辑于 2017-12-24