• 我的位置:
  • 首頁(yè)
  • -
  • 漏洞預(yù)警
  • -
  • 中間件
  • -
  • Oracle Coherence遠(yuǎn)程代碼執(zhí)行漏洞
    • CNNVD編號(hào):未知
    • 危害等級(jí): 高危 
    • CVE編號(hào):CVE-2020-2555
    • 漏洞類型: 代碼執(zhí)行
    • 威脅類型:未知
    • 廠       商:未知
    • 漏洞來(lái)源:深信服
    • 發(fā)布時(shí)間:2021-01-12
    • 更新時(shí)間:2021-01-13

    漏洞簡(jiǎn)介

    1、Oracle Coherence組件介紹

    Coherence是Oracle為了建立一種高可靠和高擴(kuò)展集群計(jì)算的一個(gè)關(guān)鍵部件,集群指的是多于一個(gè)應(yīng)用服務(wù)器參與到運(yùn)算里。Coherence的主要用途是共享一個(gè)應(yīng)用的對(duì)象(主要是java對(duì)象,比如Web應(yīng)用的一個(gè)會(huì)話java對(duì)象)和數(shù)據(jù)(比如數(shù)據(jù)庫(kù)數(shù)據(jù),通過(guò)OR-MAPPING后成為Java對(duì)象)。

    2、漏洞分析

    Zerodayinitiative公布的一篇博客中發(fā)布了一個(gè)Coherence反序列化漏洞,CVE編號(hào)為CVE-2020-2555,CVSS評(píng)分9.8分,危害性高。下面內(nèi)容來(lái)源于博客中的分析資料。

    漏洞公示

    通過(guò)補(bǔ)丁找到漏洞利用點(diǎn)

    CVE-2020-2555漏洞是由于攻擊者可以傳入可控參數(shù)并調(diào)用java方法。在Java中,類中的readObject()或readExternal()方法可以被自動(dòng)調(diào)用。這兩種方法以及從它們內(nèi)部可獲得的任何其他方法都可以視為反序列化gadget的來(lái)源。

    CVE-2020-2555的補(bǔ)丁中更改了LimitFilter類中的toString()方法,如圖:

    補(bǔ)丁在toString()中刪除了對(duì)extract()方法的所有調(diào)用語(yǔ)句,下文將介紹extract()方法的重要性。此處修改特別有趣,因?yàn)槲覀兛梢酝ㄟ^(guò)各種標(biāo)準(zhǔn)JRE類(例如BadAttributeValueExpException)的readObject()方法訪問(wèn)toString()
    如上面的代碼所示,BadAttributeValueExpException類的序列化實(shí)例可以用于調(diào)用任意類的toString()方法。此方法可用于訪問(wèn)受此補(bǔ)丁影響的LimitFilter類的toString()方法。

    有關(guān)使用toString()作為入口點(diǎn)的gadget的示例,請(qǐng)參見(jiàn)ysererial項(xiàng)目的CommonsCollections5 gadget 。

    Sink點(diǎn)的尋找

    Sink點(diǎn)指的是具有各種副作用的Java方法調(diào)用,這類副作用包括:

          -通過(guò)調(diào)用FileOutputStream.write()任意創(chuàng)建文件。
          -通過(guò)調(diào)用Runtime.exec()任意執(zhí)行命令。
          -通過(guò)調(diào)用Method.invoke()的任意方法調(diào)用。
    對(duì)于此漏洞,我們的重點(diǎn)是對(duì)Method.invoke()的調(diào)用,此方法的調(diào)用可以通過(guò)反射來(lái)調(diào)用任意Java方法。了解該信息后,我們可以查找所有存在extract()方法的實(shí)例,并且最終會(huì)調(diào)用Method.invoke()。在Coherence庫(kù)中,似乎只有這樣一個(gè)可序列化類的實(shí)例(實(shí)現(xiàn)Serializable或Externalizable接口)。


    查看ReflectionExtractor類后,我們可以確認(rèn)前面的猜測(cè):


    實(shí)現(xiàn)RCE

    通常,利用遠(yuǎn)程代碼執(zhí)行漏洞需要多個(gè)方法調(diào)用。例如,在流行的Apache Commons Collections的gadget,攻擊者需要使用ChainedTransformer將任意方法調(diào)用串接起來(lái),從而實(shí)現(xiàn)RCE。與此類似,Coherence庫(kù)中也提供了這樣一個(gè)類(ChainedExtractor),可以讓我們串接extract()調(diào)用:


    將以上信息結(jié)合起來(lái),我們可以使用如下調(diào)用鏈,最終實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行,
    如果目標(biāo)環(huán)境使用了Coherence庫(kù),并且攻擊者可以投遞惡意序列化對(duì)象,那么攻擊者就能實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行。


    參考網(wǎng)站

    暫無(wú)

    受影響實(shí)體

    目前受影響的Oracle Coherence版本:
    Oracle Coherence 12.2.1.4.0
    Oracle Coherence 12.2.1.3.0
    Oracle Coherence 12.1.3.0.0
    Oracle Coherence 3.7.1.17

    補(bǔ)丁

    官方已經(jīng)針對(duì)此漏洞發(fā)布補(bǔ)丁,請(qǐng)受影響的用戶參考以下鏈接安裝補(bǔ)丁更新:
    https://www.oracle.com/security-alerts/cpujan2020.html