能力中心
本站所有文章均为原创,如需转载请注明出处
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
2beverage
2023/01/27 19:521manganese
2022/09/02 20:11dd
2021/09/14 17:52