漏洞描述
近日,ZDI公布了一个Coherence反序列化漏洞,CVE编号为CVE-2020-2555,此漏洞是由于攻击者可以传入可控参数并调用java方法,在Java中,类中的readObject()或readExternal()方法可以被自动调用。
Oracle Coherence为Oracle融合中间件中的产品,在WebLogic 12c及以上版本中默认集成到WebLogic安装包中,T3是用于在WebLogic服务器和其他类型的Java程序之间传输信息的协议。
漏洞分析
通过补丁对比寻找漏洞利用点,攻击者可以使用受控参数来调用java方法。在Java中,会自动调用类的readObject()或者 readExternal()方法。这两种方法以及从它们内部可获得的任何其他方法都可以视为反序列化gadget的有效来源。
CVE-2020-2555的补丁中更改了LimitFilter类中的toString()方法:
extract()已从toString()中删除了对该方法的所有调用,toString()可以通过readObject()各种标准JRE类的方法来实现,例如
BadAttributeValueExpException:
如上面的代码所示,BadAttributeValueExpException该类的序列化实例可用于调用toString()任意类的方法。可以使用此技术访问受此补丁影响的LimitFilter类的toString()方法。
然后寻找Sink点,Sink点指的是具有各种副作用的Java方法调用,这类副作用包括:
通过调用FileOutputStream.write()任意创建文件。
通过调用Runtime.exec()任意执行命令。
通过调用Method.invoke()的任意方法调用。
![0b5e5054-4d13-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/0b5e5054-4d13-eb11-8da9-e4434bdf6706.png)
查看ReflectionExtractor类后,我们可以确认前面的猜测:
ReflectionExtractor 通过允许调用任意方法来提供危险原语,其中方法和参数都可以由攻击者控制。
通常,需要多个方法调用才能实现远程代码执行。例如,在流行的Apache Commons Collections gadget中,是通过使用链接任意方法调用来实现的ChainedTransformer。以类似的方式,Coherence库中有一个类允许我们链接extract()调用,该类为ChainedExtractor:
将所有这些放在一起使用以下利用链来实现远程代码执行:
因此,使用Coherence可以在恶意序列化对象库的任何项目都可以实现远程代码执行,针对WebLogic T3协议的漏洞验证:
漏洞危害
高危
影响版本
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
安全建议
参考Oracle官网发布的补丁进行升级:
https://www.oracle.com/security-alerts/cpujan2020.html
如果不依赖T3协议进行JVM通信,禁用T3协议。
参考信息
https://www.thezdi.com/blog/2020/3/5/cve-2020-2555-rce-through-a-deserialization-bug-in-oracles-weblogic-server
山石网科NEURON安全实验室成立于2015年,为多省公安厅提供技术支撑工作,为上合峰会、财富论坛、金砖五国等多次重大活动提供网络安保支撑工作。在多次攻防赛事中连获佳绩,网安中国行第一名,连续两届红帽杯冠军、网鼎杯线上第一名,在补天杯、极棒杯、全国多地的护网演习等也都获得优秀的成绩,每年获得大量的CNVD、CNNVD、CVE证书或编号。
如需帮助请咨询 hscert@hillstonenet.com