
漏洞簡述
2021年3月15日墨云安全V-Lab實驗室向Oracle官方報告了Weblogic Server RCE漏洞,2021年7月21日Oracle發(fā)布了致謝信息。
這是一個二次反序列化漏洞,是cve-2020-14756和cve-2020-14825的調(diào)用鏈相結(jié)合組成一條新的調(diào)用鏈來繞過weblogic黑名單列表。
漏洞分析
最開始我是發(fā)現(xiàn)了oracle.eclipselink.coherence.integrated.internal.cache.SerializationHelper類中的readAttributeAccessor方法

在這個方法中實例化了MethodAttributeAccessor類,在MethodAttributeAccessor類中的getAttributeValueFromObject方法存在反射調(diào)用

這里就是CVE-2020-14825的觸發(fā)點,在14825中就是LockVersionExtractor和MethodAttributeAccessor的調(diào)用鏈來進行RCE的,這兩個類都已經(jīng)加入到黑名單列表中。而SerializationHelper類的readAttributeAccessor方法被FilterExtractor的readExternal方法調(diào)用了

最重要的是FilterExtractor類的extract方法和LockVersionExtractor類的extract方法一樣都調(diào)用了getAttributeValueFromObject方法

那這里就產(chǎn)生繞過了,雖然LockVersionExtractor和MethodAttributeAccessor類都在黑名單列表里面,但是FilterExtractor類可以替代LockVersionExtractor類,并且在FilterExtractor類的readExternal方法調(diào)用了SerializationHelper.readAttributeAccessor,SerializationHelper.readAttributeAccessor方法中又實例化了MethodAttributeAccessor類。
但是這里還不能直接觸發(fā),FilterExtractor類的readExternal方法為DataInput類型不是ObjectInput,這里就要利用CVE-2020-14756前部分的調(diào)用鏈,簡單來說14756是一個二次反序列化的調(diào)用鏈,WebLogic自身實現(xiàn)了一套readObject反序列化過程,自定義的這一套需要實現(xiàn)ExternalizableLite接口,它的readExternal參數(shù)是DataInput類型。

看下CVE-2020-14756前部分需要用到的調(diào)用鏈
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)
可以看到這里調(diào)用到compare方法了,而cve-2020-14825中剩下的部分就是compare->extract->getAttributeValueFromObject來進行RCE的。
總結(jié)
1.這是一個二次反序列化漏洞
2.整條鏈是cve-2020-14756和cve-2020-14825的結(jié)合體
3.FilterExtractor類替換LockVersionExtractor類
4.SerializationHelper.readAttributeAccessor替換MethodAttributeAccessor
5.組成一條完整的調(diào)用鏈
緊急通報!??!
網(wǎng)絡(luò)安全學(xué)習資料白嫖的機會來了?。?!
