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

admin 2022年10月1日20:24:01安全漏洞评论17 views3017字阅读10分3秒阅读模式

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()方法,如图:
CVE-2020-2555|Oracle Coherence远程代码执行漏洞
补丁在toString()中删除了对extract()方法的所有调用语句,下文将介绍extract()方法的重要性。此处修改特别有趣,因为我们可以通过各种标准JRE类(例如BadAttributeValueExpException)的readObject()方法访问toString()
如上面的代码所示,BadAttributeValueExpException类的序列化实例可以用于调用任意类的toString()方法。此方法可用于访问受此补丁影响的LimitFilter类的toString()方法。

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

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

  • Sink点的寻找


Sink点指的是具有各种副作用的Java方法调用,这类副作用包括:
      -通过调用FileOutputStream.write()任意创建文件。
      -通过调用Runtime.exec()任意执行命令。
      -通过调用Method.invoke()的任意方法调用。
对于此漏洞,我们的重点是对Method.invoke()的调用,此方法的调用可以通过反射来调用任意Java方法。了解该信息后,我们可以查找所有存在extract()方法的实例,并且最终会调用Method.invoke()。在Coherence库中,似乎只有这样一个可序列化类的实例(实现Serializable或Externalizable接口)。

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

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

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

ReflectionExtractor提供危险的原语,允许攻击者调用任意方法,并且攻击者可以控制其中的方法和参数。

  • 实现RCE


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

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

将以上信息结合起来,我们可以使用如下调用链,最终实现远程代码执行,
如果目标环境使用了Coherence库,并且攻击者可以投递恶意序列化对象,那么攻击者就能实现远程代码执行。

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


漏洞复现


使用weblogic12.2.1.3 环境进行复现。通过T3协议传入恶意序列化数据,在服务端解析时,执行恶意代码,效果如图:

CVE-2020-2555|Oracle 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小时持续的安全运营服务。在漏洞爆发之初,对存在漏洞的用户,检查并更新了客户防护设备的策略,确保客户防护设备可以防御此漏洞风险。


深信服安全云眼】在漏洞爆发之初,已完成检测更新,对所有用户网站探测,保障用户安全。不清楚自身业务是否存在漏洞的用户,可注册信服云眼账号,获取30天免费安全体验。

注册地址:http://saas.sangfor.com.cn


深信服云镜】在漏洞爆发第一时间即完成检测能力的发布,部署了云镜的用户可以通过升级来快速检测网络中是否受该高危风险影响,避免被攻击者利用。离线使用云镜的用户需要下载离线更新包来获得漏洞检测能力,可以连接云端升级的用户可自动获得漏洞检测能力。


临时修复建议

对T3服务进行控制
控制T3服务的方法:

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

在上图这个weblogic界面中选择安全-筛选器,在下方出现的界面中找到"连接筛选器",在里面输入
security.net.ConnectionFilterImpl
然后在连接筛选器规则中输入
127.0.0.1 * * allow t3 t3s,0.0.0.0/0 * * deny t3 t3s
最后保存并重启服务器即可生效。


时间轴


2020/3/6



Oracle发布2020年1月关键补丁更新中修复了CVE-2020-2555漏洞。

2020/3/6



深信服千里目安全实验室对此漏洞翻译并发布分析文章。

2020/3/10



深信服千里目安全实验室复现漏洞并二次发布文章。



点击阅读原文,及时关注深信服智安全Wiki平台查询漏洞的产品解决方案(需登录)~

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


原文始发于微信公众号(深信服千里目安全实验室):CVE-2020-2555|Oracle Coherence远程代码执行漏洞

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月1日20:24:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  CVE-2020-2555|Oracle Coherence远程代码执行漏洞 http://cn-sec.com/archives/784981.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: