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
的Bypass
。然而,这个安全问题首次出现在2017年4月24日,即CVE-2017-3506
。 我们仔细研究了CVE-2019-2729
,看看这类漏洞是如何进行的,特别是通过列入黑名单或列入白名单,以及为什么它已经成为一个反复出现的安全问题。
WebLogic
服务器中的上下文传播使得在支持的协议中携带应用程序上下文信息成为可能。此信息通过可扩展标记语言序列化Java对象传递。 默认情况下,以下URL
通过简单对象访问协议(SOAP)请求接受上下文信息:
/_async/*
/wls-wsat/*
序列化的XML
数据包含在SOAP
请求的<work:WorkContext>
标记中。WorkContext
信息的反序列化在WorkContextXmlInputAdapter
类中实现,如图所示。
如上所示,XMLDecoder
类用于反序列化上下文信息。 应该注意,XMLDecoder
不应与不受信任的输入一起使用的类。 正如其他研究工作所证明的那样,它允许对任意类型进行任意方法和构造函数调用。 由于使用XMLDecoder
具有一定风险以及作为CVE-2017-3506
的修补措施,开发人员已在WorkContextXmlInputAdapter
中添加了validate()
函数,以在反序列化之前过滤掉恶意标记。
在CVE-2019-2725
中,漏洞的validate()
函数如图所示。
如上所示,RCE
所需的许多标签被有效列入黑名单。 但是,validate()
无法考虑<class>
标记,这允许攻击者使用任意构造函数参数启动任何类。 这可以以多种方式使用以实现任意代码执行。 一个示例是启动UnitOfWorkChangeSet
对象,该对象接受字节数组作为构造函数参数。
如图所示,UnitOfWorkChangeSet
将在初始化时不加区分地反序列化该字节数组。 例如,具有精心设计的恶意序列化对象的字节数组可用于实现任意代码执行。 然后可以使用Python
片段生成攻击流量。
Python概念验证能够使用ysoserial
生成的Jdk7u21
payload生成攻击流量。
当然,由于此漏洞利用需要<class>
标记,Oracle
会继续将此标记作为CVE-2019-2725
的补丁添加到黑名单中。
用于修复CVE-2019-2725的<class>
标签的黑名单。
另一方面,事实证明CVE-2019-2725
的Bypass并不是那么复杂。 实际上,对于JDK1.6,使用<array method =“forName”>
标记有效地替换了<class>
标记的功能。只需用<array method =“forName”>
标签替换<class>
标签就可以有效地绕过黑名单。
<array method =“forName”>
标记,绕过<class>
标记的黑名单。
在这种情况下更值得我们注意的是CVE-2019-2729
修补的方式:Oracle
选择使用白名单而不是黑名单。 通过新引入的validateFormat()
函数来实现,其中白名单规则在WorkContextFormatInfo
中定义。
代码段显示如何使用白名单来修复CVE-2019-2729
。
从图中可以看出,白名单仍然允许<array>
标记,但只允许包含带有“byte”
值的“class”
属性或带有任何值的“length”
属性。
起初它可能看起来不是那么容易辨认,但通常使用白名单来阻止恶意内容比使用黑名单更有效,特别是在防止可能重新引入安全问题的Bypass时。 系统管理员,开发人员和IT/安全团队应始终采用最佳实践和缓解措施,其中包括:
使用Oracle
的紧急补丁升级到产品的非易受攻击版本
通过删除war
和wls-wsat.war
防止访问易受攻击的组件,然后重新启动WebLogic
服务(阻止访问易受攻击的URL)
仅限受影响的通信端口访问受信任的主机
通过入侵防御系统主动监控,检测和阻止恶意流量
添加多层安全机制,例如虚拟补丁,这些机制优先利用已知,未知和未公开的漏洞; 和应用程序控制,可防止未经授权或可疑的应用程序执行
趋势科技Deep Security™
和Vulnerability Protection
解决方案通过以下深度包检测规则保护系统和用户。
本文为翻译文章,来自:https://blog.trendmicro.com/trendlabs-security-intelligence/using-whitelisting-to-remediate-an-rce-vulnerability-cve-2019-2729-in-oracle-weblogic/?tdsourcetag=s_pcqq_aiomsg