WebLogic 反序列化漏洞,CVE-2017-3248成功绕过之前的官方修复
WebLogic 反序列化漏洞,CVE-2017-3248成功绕过之前的官方修复
漏洞描述
2017年1月27日,WebLogic官方发布了一个编号为CVEID: CVE-2017-3248 的漏洞,影响为Critical。之前轰动一时的反序列化漏洞,官方当时的修补措施,在本漏洞中可被绕过。此次漏洞影响WebLogic版本如下图所示:
漏洞分析与验证
分析之前WebLogic漏洞CVE-2015-4852的补丁,发现WebLogic采用黑名单的方式过滤危险的反序列化类,如下图所示:
但是这种修复方式很被动,存在被绕过的风险,只要发现可用并且未在黑名单之外的反序列化类,那么之前的防护就会被打破,系统遭受攻击。这次发布的CVE-2017-3248 就是利用了黑名单之外的反序列化类,通过JRMP协议达到执行任意反序列化payload。(Java远程消息交换协议JRMP即Java Remote MessagingProtocol,是特定于Java技术的、用于查找和引用远程对象的协议。这是运行在Java远程方法调用RMI之下、TCP/IP之上的线路层协议。)
启明星辰 ADLab 通过对本漏洞的深度分析,构造了对应的POC并测试验证成功,具体验证情况如下:
测试环境:WebLogicServer 10.3.6.0.160719 ,已经打了“Patch 23094342”补丁。
测试过程:使用自制漏洞利用工具对测试系统进行漏洞利用测试。
第一步:监听JRMP协议端口
第二步:通过T3协议发送反序列化payload
第三步:在WebLogic服务器上成功弹出计算器
漏洞影响
该漏洞影响WebLogic 10.3.6.0, 12.1.3.0,12.2.1.0, 12.2.1.1多个版本,并且官方仍未发布针对该漏洞的补丁,所以危害巨大。
漏洞对比
WebLogic反序列化漏洞由于如前所述,其修补模式存在绕过可能性,引起不少圈内人士关注。曾在去年也被曝出过一个CVE-2016-0638漏洞,我们一并做个分析。
关于CVE-2016-0638,2016年4月11日pwntester在github放出了CVE-2016-0638的利用代码,地址:https://github.com/pwntester/SerialKillerBypassGadgetCollection/blob/master/src/main/java/serialkiller/bypass/Weblogic1.java 。
原理是将反序列化的对象封装进了weblogic.corba.utils.MarshalledObject,然后再对MarshalledObject进行序列化,生成payload字节码。反序列化时MarshalledObject不在WebLogic黑名单里,可正常反序列化,在反序列化时MarshalledObject对象调用readObject时对MarshalledObject封装的序列化对象再次反序列化,这样就逃过了黑名单的检查。部分利用代码如下所示:
在打过CVE-2015-4852补丁的系统成功复现,如下图所示:
说明该漏洞可以绕过CVE-2015-4852这个漏洞的补丁,但是在测试WebLogicServer 10.3.6.0.160719打了这个补丁时并未触发,直接抛出异常如下图所示:
可以看到weblogic.corba.utils.MarshalledObject已经加入了黑名单。
漏洞修复
由于官方未发布针对该漏洞的补丁,可更新p25388747_1036_Generic(10.3.6.0.170418)这个官方最新的补丁,除此之外其它补丁均不安全。经测试打了该补丁以后漏洞不能直接触发,但也只是缓解办法,未来仍要关注WebLogic官方补丁。
几点建议:
1、升级JDK版本。由于Java在今年一月份以后更新了反序列化防御接口,可以缓解反序列化漏洞的影响。
2、升级WebLogic、删除不需要的页面,清理不安全的第三方库。
漏洞相关:
http://www.oracle.com/technetwork/security-advisory/cpujan2017-2881727.html
http://www.cnvd.org.cn/flaw/show/CNVD-2017-00919
补丁汇总:
http://blog.csdn.net/u013054618/article/details/71107100
目录 返回
首页