WebLogic CVE-2021-2394 RCE漏洞分析

漏洞描述

2021年4月4日斗象科技星耀实验室Li Boheng向Oracle官方报告了WebLogic Server RCE漏洞,2021年7月21日Oracle发布了致谢信息。

这是内部重写反序列化过程的一个漏洞,结合了CVE-2020-14756和CVE-2020-14825的调用链重新组合的一条新的调用链,绕过了之前的黑名单

漏洞分析

首先根据之前CVE-2020-14756的思路,在AttributeHolder类的readExternal中存在将ObjectInput转换为DataInput的操作,可以进一步扩大寻找调用链的范围

同时在ExternalizableHelper.readObject方法中会循环对序列化的值进一步读取,由于补丁限制,直接通过newInstance实例化恶意类的方式已经被阻止,需要进一步在readExternal(DataInput)中寻找新的利用链

由此寻找可以触发readExternal并且重写了相关方法的类,遍历寻找实现了readExternal方法的类,在FilterExtractor类中的readExternal发现调用了SerializationHelper.readAttributeAccessor方法。进一步进入此方法

发现对MethodAttributeAccessor类进行了一系列的赋值操作,了解CVE-2020-14825漏洞可以知道在调用到getAttributeValueFromObject方法时存在RCE。接下来进一步向上回溯,FilterExtractor的extract方法满足上述要求,并且并不需要对MethodAttributeAccessor进行处理,进一步对黑名单进行了绕过。这时只要结合之前的CVE-2020-14756调用到FilterExtractor的extract方法即可。当然这里在序列化和反序列化的时候也有一些限制,由于在写入序列化数据的时候,只填入了部分必需数据

在反序列化时,就会调用到MethodAttributeAccessor.initializeAttributes方法中

除了CVE-2020-14825中的赋值,还有一个init的加载过程,这时就会调用到initializeAttributes获取相关类中的信息,进一步反射赋值。

在前一个版本的修复中,weblogic的T3协议采用了白名单的机制(String.class, ServiceContext.class, ClassTableEntry.class, JVMID.class, AuthenticatedUser.class, RuntimeMethodDescriptor.class, Immutable.class),所以漏洞无法用T3触发,但是依旧可以用IIOP进行反序列化执行

调用栈

时间线

2021年4月4日星耀实验室向Oracle官方报告了此漏洞

2021年4月5日Oracle分配了issue编号

2021年4月21日邮件再次确认漏洞是否存在,Oracle官方回复将会尽快修补

2021年4月24日Oracle回复漏洞确认邮件以及处理进度

2021年7月17日Oracle分配CVE编号CVE-2021-2394

2021年7月21日Oracle发布致谢信息

修复建议

及时更新补丁,参考Oracle官网发布补丁:

https://www.oracle.com/security-alerts/cpujul2021.html

评论(1)

dd

2021/09/14 17:52

发表评论

captcha