漏洞简述
2021年3月15日墨云安全V-Lab实验室向Oracle官方报告了Weblogic Server RCE漏洞,2021年7月21日Oracle发布了致谢信息。
这是一个二次反序列化漏洞,是cve-2020-14756和cve-2020-14825的调用链相结合组成一条新的调用链来绕过weblogic黑名单列表。
漏洞分析
最开始我是发现了oracle.eclipselink.coherence.integrated.internal.cache.SerializationHelper
类中的readAttributeAccessor
方法
在这个方法中实例化了MethodAttributeAccessor
类,在MethodAttributeAccessor
类中的getAttributeValueFromObject
方法存在反射调用
这里就是CVE-2020-14825
的触发点,在14825
中就是LockVersionExtractor
和MethodAttributeAccessor
的调用链来进行RCE的,这两个类都已经加入到黑名单列表中。而SerializationHelper
类的readAttributeAccessor
方法被FilterExtractor
的readExternal
方法调用了
最重要的是FilterExtractor
类的extract
方法和LockVersionExtractor
类的extract
方法一样都调用了getAttributeValueFromObject
方法
那这里就产生绕过了,虽然LockVersionExtractor
和MethodAttributeAccessor
类都在黑名单列表里面,但是FilterExtractor
类可以替代LockVersionExtractor
类,并且在FilterExtractor
类的readExternal
方法调用了SerializationHelper.readAttributeAccessor
,SerializationHelper.readAttributeAccessor
方法中又实例化了MethodAttributeAccessor
类。
但是这里还不能直接触发,FilterExtractor
类的readExternal
方法为DataInput
类型不是ObjectInput
,这里就要利用CVE-2020-14756
前部分的调用链,简单来说14756
是一个二次反序列化的调用链,WebLogic
自身实现了一套readObject
反序列化过程,自定义的这一套需要实现ExternalizableLite
接口,它的readExternal
参数是DataInput
类型。
看下CVE-2020-14756
前部分需要用到的调用链
compare:416, SortedBag$WrapperComparator (com.tangosol.util)
compare:1295, TreeMap (java.util)
put:538, TreeMap (java.util)
add:152, SortedBag (com.tangosol.util)
add:268, TopNAggregator$PartialResult (com.tangosol.util.aggregator)
readExternal:297, TopNAggregator$PartialResult (com.tangosol.util.aggregator)
readExternalizableLite:2265, ExternalizableHelper (com.tangosol.util)
readObjectInternal:2579, ExternalizableHelper (com.tangosol.util)
readObject:2524, ExternalizableHelper (com.tangosol.util)
readObject:2502, ExternalizableHelper (com.tangosol.util)
readExternal:406, AttributeHolder (com.tangosol.coherence.servlet)
readExternal:371, AttributeHolder (com.tangosol.coherence.servlet)
可以看到这里调用到compare
方法了,而cve-2020-14825
中剩下的部分就是compare->extract->getAttributeValueFromObject
来进行RCE的。
总结
1.这是一个二次反序列化漏洞
2.整条链是cve-2020-14756和cve-2020-14825的结合体
3.FilterExtractor类替换LockVersionExtractor类
4.SerializationHelper.readAttributeAccessor替换MethodAttributeAccessor
5.组成一条完整的调用链
时间线
- 2021年3月15日V-Lab实验室向Oracle官方报告了此漏洞
- 2021年3月17日Oracle分配了issue编号
- 2021年4月24日Oracle确认在下一个补丁日修复此漏洞
- 2021年7月17日Oracle分配CVE编号CVE-2021-2394
- 2021年7月21日Oracle发布致谢信息
修复建议
及时更新补丁,参考oracle官网发布的补丁: