Oracle Coherence&WebLogic反序列化远程代码执行误差危害通告

宣布时间 2020-03-06

误差编号和级别


CVE编号:CVE-2020-2555 ,危险级别:严重 ,CVSS分值:9.8


影响版本


Oracle Coherence 3.7.1.17

Oracle Coherence 12.1.3.0.0

Oracle Coherence 12.2.1.3.0

Oracle Coherence 12.2.1.4.0


误差概述


克日 ,包括在1月份Oracle要害补丁程序更新CPU(Critical Patch Update)的误差 ,Oracle Coherence反序列化远程代码执行误差(CVE-2020-2555)的细节已被果真。


Oracle Coherence为Oracle融合中心件中的产品 ,是业界领先的内存数据网格解决计划 ,它能为公司和组织提供对常用数据的快速会见。在WebLogic 12c及以上版本中默认集成到WebLogic装置包中。Oracle Coherence中的反序列化远程代码执行误差允许未经身份验证的攻击者通过全心结构的T3网络协议请求举行攻击。乐成使用该误差的攻击者可以在目的主机上执行恣意代码。


误差验证


误差细节详见:https://www.zerodayinitiative.com/blog/2020/3/5/cve-2020-2555-rce-through-a-deserialization-bug-in-oracles-weblogic-server。


通过补丁找到误差使用点


CVE-2020-2555误差是由于攻击者可以传入可控参数并挪用java要领。在Java中 ,类中的readObject()或readExternal()要领可以被自动挪用。这两种要领以及从它们内部可获得的任何其他要领都可以视为反序列化gadget的泉源。


CVE-2020-2555的补丁中更改了LimitFilter类中的toString()要领 ,如图:


尊龙凯时 - 人生就是搏!


补丁在toString()中删除了对extract()要领的所有挪用语句 ,下文将先容extract()要领的主要性。此处修改特殊有趣 ,由于我们可以通过种种标准JRE类(例如BadAttributeValueExpException)的readObject()要体会见toString()如上面的代码所示 ,BadAttributeValueExpException类的序列化实例可以用于挪用恣意类的toString()要领。此要领可用于会见受此补丁影响的LimitFilter类的toString()要领。


尊龙凯时 - 人生就是搏!


有关使用toString()作为入口点的gadget的示例 ,请拜见ysererial项目的CommonsCollections5 gadget 。


Sink点的寻找


Sink点指的是具有种种副作用的Java要领挪用 ,这类副作用包括:      


-通过挪用FileOutputStream.write()恣意建设文件。      

-通过挪用Runtime.exec()恣意执行下令。      

-通过挪用Method.invoke()的恣意要领挪用。


关于此误差 ,我们的重点是对Method.invoke()的挪用 ,此要领的挪用可以通过反射来挪用恣意Java要领。相识该信息后 ,我们可以查找所有保存extract()要领的实例 ,并且最终会挪用Method.invoke()。在Coherence库中 ,似乎只有这样一个可序列化类的实例(实现Serializable或Externalizable接口)。


尊龙凯时 - 人生就是搏!


审查ReflectionExtractor类后 ,我们可以确认前面的推测:


尊龙凯时 - 人生就是搏!


ReflectionExtractor提供危险的原语 ,允许攻击者挪用恣意要领 ,并且攻击者可以控制其中的要领和参数。


实现RCE


通常 ,使用远程代码执行误差需要多个要领挪用。例如 ,在盛行的Apache Commons Collections的gadget ,攻击者需要使用ChainedTransformer将恣意要领挪用串接起来 ,从而实现RCE。与此类似 ,Coherence库中也提供了这样一个类(ChainedExtractor) ,可以让我们串接extract()挪用:


尊龙凯时 - 人生就是搏!


将以上信息团结起来 ,我们可以使用如下挪用链 ,最终实现远程代码执行 ,若是目的情形使用了Coherence库 ,并且攻击者可以投递恶意序列化工具 ,那么攻击者就能实现远程代码执行。


尊龙凯时 - 人生就是搏!



修复建议


官方已经针对此误差宣布补丁 ,请受影响的用户参考以下链接装置补丁更新:https://www.oracle.com/security-alerts/cpujan2020.html。


暂时修复建议


若相关用户暂时无法装置修复补丁 ,可通过控制T3协议的会见来暂时阻断针对使用T3协议误差的攻击。


1. 进入weblogic控制台 ,在base_domain的设置页面中 ,进入“清静”选项卡页面 ,点击“筛选器” ,进入毗连筛选器设置。

2. 在毗连筛选器中输入:weblogic.security.net.ConnectionFilterImpl ,在毗连筛选器规则中输入127.0.0.1 * * allow t3 t3s ,0.0.0.0/0 * * deny t3 t3s(t3 和t3s 协议的所有端口只允许外地会见)。

3. 生涯并重启服务器即可生效。


参考链接


https://www.zerodayinitiative.com/blog/2020/3/5/cve-2020-2555-rce-through-a-deserialization-bug-in-oracles-weblogic-server