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

    漏洞簡介

    1、Oracle Coherence組件介紹

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

    2、漏洞分析

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

    漏洞公示

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

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

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

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

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

    Sink點(diǎn)的尋找

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

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


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


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

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


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


    參考網(wǎng)站

    暫無

    受影響實(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)針對此漏洞發(fā)布補(bǔ)丁,請受影響的用戶參考以下鏈接安裝補(bǔ)丁更新:
    https://www.oracle.com/security-alerts/cpujan2020.html