漏洞簡述
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.組成一條完整的調用鏈
緊急通報!!!