WebLogic CVE-2021-2394 RCE 漏洞分析
漏洞简述
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
方法了,而cve-2020-14825
中剩下的部分就是compare->extract->getAttributeValueFromObject
来进行 RCE 的。
总结
1.这是一个二次反序列化漏洞
2.整条链是 cve-2020-14756 和 cve-2020-14825 的结合体
3.FilterExtractor 类替换 LockVersionExtractor 类
4.SerializationHelper.readAttributeAccessor 替换 MethodAttributeAccessor
5.组成一条完整的调用链
紧急通报!!!
评论