Oracle WebLogic最近在其软件中披露并修补了远程代码执行(RCE)漏洞,其中许多漏洞是由于不安全的反序列化造成的。Oracle 在2019年6月18日的带外安全补丁中解决了最新的漏洞CVE-2019-2729 .CVE -2019-2729的CVSS评分为9.8,这使其成为一个关键漏洞。此漏洞相对易于利用,但需要Java Development
Oracle WebLogic最近在其软件中披露并修补了远程代码执行(RCE)漏洞,其中许多漏洞是由于不安全的反序列化造成的。Oracle 在2019年6月18日的带外安全补丁中解决了最新的漏洞CVE-2019-2729 .CVE -2019-2729的CVSS评分为9.8,这使其成为一个关键漏洞。此漏洞相对易于利用,但需要Java Development Kit(JDK)1.6。默认情况下,WebLogic版本10.3.6随JDK 1.6一起提供。
cve-2019-2729基本上是CVE-2019-2725的旁路。然而,这个安全问题首次出现在2017年4月24日,即CVE-2017-3506。我们仔细研究了CVE-2019-2729,看看这类漏洞是如何得到纠正的 - 特别是通过列入黑名单或列入白名单 - 以及为什么它已经成为一个反复出现的安全问题。
CVE-2019-2725和CVE-2019-2729的根本原因 WebLogic服务器中的上下文传播使得在支持的协议中携带应用程序上下文信息成为可能。此信息通过可扩展标记语言序列化Java(XML)对象传递。默认情况下,以下URL通过简单对象访问协议(SOAP)请求接受上下文信息: / _async / * / wls-wsat / *
序列化的XML数据包含在SOAP请求的<work:WorkContext>标记中。WorkContext信息的反序列化在WorkContextXmlInputAdapter 类中实现,如图1所示。
图1. WorkContextXmlInputAdapter类,其中实现了WorkContext信息的反序列化
如上所示,XMLDecoder类用于反序列化上下文信息。应该注意,XMLDecoder是一个不应该与不受信任的输入一起使用的类。正如其他研究工作所证明的那样,它允许对任意类型进行任意方法和构造函数调用。由于使用XMLDecoder的风险以及作为CVE-2017-3506的缓解,已在WorkContextXmlInputAdapter中添加了validate()函数,以在反序列化之前过滤掉恶意标记。
在cve-2019-2725的情况下,漏洞之前的validate()函数如图2所示。
图2. CVE-2019-2725之前的validate()函数
如上所示,RCE所需的许多标签被有效列入黑名单。但是,validate()无法考虑<class>标记,这可以允许攻击者使用任意构造函数参数启动任何类。这可以以多种方式使用以实现任意代码执行。一个示例是启动UnitOfWorkChangeSet对象,该对象接受字节数组作为构造函数参数。
图3.显示一旦初始化,UnitOfWorkChangeSet如何不加思义地对一个字节数组进行去序列化的代码片段
如图3所示,UnitOfWorkChangeSet将在初始化时不加区分地反序列化该字节数组。例如,具有精心设计的恶意序列化对象的字节数组可用于实现任意代码执行。然后,可以使用Python片段(如图4所示)生成攻击流量。
通过产生概念的图4的Python验证(PoC),能够使用所述有效载荷Jdk7u21攻击流量ysoserial
当然,由于此漏洞利用需要<class>标记,Oracle会继续将此标记作为CVE-2019-2725的补丁添加到黑名单中。
图5.用于修复CVE-2019-2725的<class>标签的黑名单
CVE-2019-2729:CVE-2019-2725的旁路 另一方面,事实证明CVE-2019-2725的旁路并不是那么复杂。实际上,对于JDK 1.6,使用 <array method =“forName”>标记有效地替换了 <class>标记的功能。只需用 <array method =“forName”>标签替换 <class>标签就可以有效地绕过黑名单。
图6. <array method =“forName”>标记(突出显示)绕过<class>标记的黑名单
在这种情况下更有趣的是CVE-2019-2729被修补的方式:Oracle选择使用白名单而不是黑名单。这是通过新引入的validateFormat()函数实现的,其中白名单规则在WorkContextFormatInfo中定义。
图7.显示白名单如何用于修复CVE-2019-2729的代码段
从图7中可以看出,白名单仍然允许<array>标记,但只允许包含带有“byte”值的“class”属性或带有任何值的“length”属性。
最佳实践 虽然起初它可能看起来不是那么黑白,但通常使用白名单来阻止恶意内容比使用黑名单更有效,特别是在防止可能重新引入安全问题的旁路时。系统管理员,开发人员和IT /安全团队应始终采用最佳实践和缓解措施,其中包括:
趋势科技 Deep Security ™和 Vulnerability Protection 解决方案通过以下深度包检测(DPI)规则保护系统和用户:
在趋势科技服务器深度发现督察 保护客户免受可能利用通过该DDI规则CVE-2019年至2729年的威胁:
趋势科技™TippingPoint威胁防护系统已发布此漏洞的客户屏蔽编写器(CSW)文件,供客户在TMC上下载 。适用的规则如下:
作者:Sivathmican Sivakumaran(漏洞研究员)
翻译自https://blog.trendmicro.com/trendlabs-security-intelligence/using-whitelisting-to-remediate-an-rce-vulnerability-cve-2019-2729-in-oracle-weblogic/?tdsourcetag=s_pcqq_aiomsg