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