专栏名称: 深信服千里目安全实验室
深信服科技旗下安全实验室,致力于网络安全攻防技术的研究和积累,深度洞察未知网络安全威胁,解读前沿安全技术。
目录
相关文章推荐
51好读  ›  专栏  ›  深信服千里目安全实验室

CVE-2020-2555|Oracle Coherence远程代码执行漏洞

深信服千里目安全实验室  · 公众号  ·  · 2020-03-07 00:21

正文

Zerodayinitiative公布的一篇博客中发布了一个Coherence反序列化漏洞,CVE编号为CVE-2020-2555,CVSS评分9.8分,危害性高。CVE-2020-2555漏洞是由于攻击者可以传入可控参数并调用java方法。在Java中,类中的readObject()或readExternal()方法可以被自动调用。这两种方法以及从它们内部可获得的任何其他方法都可以视为反序列化gadget的来源。





漏洞名称 :Oracle Coherence远程代码执行漏洞CVE-2020-2555

威胁等级 :高危

影响范围

Oracle Coherence 12.2.1.4.0
Oracle Coherence 12.2.1.3.0
Oracle Coherence 12.1.3.0.0
Oracle Coherence 3.7.1.17

漏洞类型 :代码执行

利用难度 :未知






漏洞分析


1 Oracle Coherence组件介绍

Coherence是Oracle为了建立一种高可靠和高扩展集群计算的一个关键部件,集群指的是多于一个应用服务器参与到运算里。Coherence的主要用途是共享一个应用的对象(主要是java对象,比如Web应用的一个会话java对象)和数据(比如数据库数据,通过OR-MAPPING后成为Java对象)。


2漏洞分析


Zerodayinitiative 公布的一篇博客中发布了一个Coherence反序列化漏洞,CVE编号为CVE-2020-2555,CVSS评分9.8分,危害性高。下面内容来源于博客中的分析资料。
  • 通过补丁找到漏洞利用点


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库,并且攻击者可以投递恶意序列化对象,那么攻击者就能实现远程代码执行。


影响范围


目前受影响的Oracle Coherence版本:
Oracle Coherence 12.2.1.4.0
Oracle Coherence 12.2.1.3.0
Oracle Coherence 12.1.3.0.0
Oracle Coherence 3.7.1.17


解决方案

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

深信服解决方案

深信服下一代防火墙 】可轻松防御此漏洞,建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。


深信服云盾 】已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。


深信服安全感知平台 】可检测利用该漏洞的攻击,实时告警,并可联动【深信服下一代防火墙等产品】实现对攻击者ip的封堵。


深信服安全运营服务 】深信服云端安全专家提供7*24小时持续的安全运营服务。在漏洞爆发之初,对存在漏洞的用户,检查并更新了客户防护设备的策略,确保客户防护设备可以防御此漏洞风险。







请到「今天看啥」查看全文