作者:墨云科技 VLab Team
原文鏈接:https://mp.weixin.qq.com/s/LbMB-2Qyrh3Lrqc_vsKIdA

漏洞簡述

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方法

image-20210723163152025

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

image-20210723164028031

這里就是CVE-2020-14825的觸發點,在14825中就是LockVersionExtractorMethodAttributeAccessor的調用鏈來進行RCE的,這兩個類都已經加入到黑名單列表中。而SerializationHelper類的readAttributeAccessor方法被FilterExtractorreadExternal方法調用了

image-20210723164802858

最重要的是FilterExtractor類的extract方法和LockVersionExtractor類的extract方法一樣都調用了getAttributeValueFromObject方法

image-20210723165142084

那這里就產生繞過了,雖然LockVersionExtractorMethodAttributeAccessor類都在黑名單列表里面,但是FilterExtractor類可以替代LockVersionExtractor類,并且在FilterExtractor類的readExternal方法調用了SerializationHelper.readAttributeAccessor,SerializationHelper.readAttributeAccessor方法中又實例化了MethodAttributeAccessor類。

但是這里還不能直接觸發,FilterExtractor類的readExternal方法為DataInput類型不是ObjectInput,這里就要利用CVE-2020-14756前部分的調用鏈,簡單來說14756是一個二次反序列化的調用鏈,WebLogic自身實現了一套readObject反序列化過程,自定義的這一套需要實現ExternalizableLite接口,它的readExternal參數是DataInput類型。

image-20210723171443477

看下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. 組成一條完整的調用鏈

時間線

  • 2021年3月15日V-Lab實驗室向Oracle官方報告了此漏洞
  • 2021年3月17日Oracle分配了issue編號
  • 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


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1655/