WebLogic EJBTaglibDescriptor XXE漏洞(CVE-2019-2888)分析

酷酷的曉得哥發表於2019-10-31

作者:Longofo@知道創宇404實驗室
時間:2019年10月16日

原文連結:

這個漏洞和之前@Matthias Kaiser提交的幾個XXE漏洞是類似的,而 EJBTaglibDescriptor應該是漏掉的一個,可以參考之前幾個XXE的 。我和@Badcode師傅反編譯了WebLogic所有的Jar包,根據之前幾個XXE漏洞的特徵進行了搜尋匹配到了這個EJBTaglibDescriptor類,這個類在反序列化時也會進行XML解析。

Oracle釋出了10月份的補丁,詳情見連結( https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html)

環境

  • Windows 10
  • WebLogic 10.3.6.0.190716(安裝了19年7月補丁)
  • Jdk160_29(WebLogic 自帶的JDK)

漏洞分析

weblogic.jar!\weblogic\servlet\ejb2jsp\dd\EJBTaglibDescriptor.class這個類繼承自 java\io\Externalizable

因此在序列化與反序列化時會自動呼叫子類重寫的 writeExternalreadExternal

看下 writeExternal的邏輯與 readExternal的邏輯,

readExternal中,使用 ObjectIutput.readUTF讀取反序列化資料中的String資料,然後呼叫了load方法,

在load方法中,使用 DocumentBuilder.parse解析了反序列化中傳遞的XML資料,因此這裡是可能存在XXE漏洞的

writeExternal中,呼叫了本身的 toString方法,在其中又呼叫了自身的 toXML方法

toXML的作用應該是將 this.beans轉換為對應的xml資料。看起來要構造payload稍微有點麻煩,但是序列化操作是攻擊者可控制的,所以我們可以直接修改 writeExternal的邏輯來生成惡意的序列化資料:

漏洞復現

1、重寫  EJBTaglibDescriptor中的 writeExternal函式,生成payload

2、傳送payload到伺服器

在我們的HTTP伺服器和FTP伺服器接收到了my.dtd的請求與win.ini的資料

3、在打了7月份最新補丁的伺服器上能看到報錯資訊


參考連結:

[1] 分析: 

[2]   https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html


如需轉載請註明來源。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69912109/viewspace-2662049/,如需轉載,請註明出處,否則將追究法律責任。

相關文章