CVE-2020-13942 | Apache Unomi遠程代碼執行漏洞通告

發布時間 2020-11-19

0x00 漏洞概述

CNVD   ID

CVE-2020-13942

時      間

2020-11-19

類     型

RCE

等      級

嚴重

遠程利用

影響范圍

Apache Unomi < 1.5.2

 

0x01 漏洞詳情

 

image.png

Apache Unomi是一個Java開源客戶數據平臺,旨在管理客戶和訪問者的數據,并個性化客戶體驗。

2020年11月17日,Apache Unomi被披露存在嚴重安全漏洞(CVE-2020-13942),其CVSS評分為10分。

由于Apache Unomi允許遠程攻擊者使用包含任意類的MVEL和OGNL表達式發送惡意請求,最終可導致攻擊者使用Unomi應用程序權限遠程執行代碼。

 

漏洞細節:

Unomi依賴于諸如OGNL或MVEL之類的表達式語言(EL),以允許用戶制定復雜而細致的查詢。其基于EL的條件來訪問存儲數據。

在1.5.1之前的版本中,攻擊者通過注入可以對Unomi進行RCE的攻擊。攻擊者能夠通過發送單個請求在Unomi服務器上執行任意代碼和OS命令。此漏洞CVE ID為CVE-2020-11975,目前雖然已經修復,但修復并不充分,可被輕易繞過。

CVE-2020-11975的補丁中引入了SecureFilteringClassLoader函數,該函數依賴allowlist和blocklist檢查表達式中使用的類。SecureFilteringClassLoader依賴這樣一個不正確的假設:MVEL和OGNL表達式中的每個類都是使用ClassLoader類的loadClass()方法加載的。SecureFilteringClassLoader覆蓋了ClassLoader loadClass方法,并引入了allowlist和blocklist檢查。事實上,除了調用loadClass()方法外,還有多種加載類的方法,這會導致安全繞過,并使Unomi遭受RCE攻擊。

Unomi 1.5.1中,允許評估條件使用MVEL表達式,該條件包含任意類。在某些情況下,MVEL表達式使用已實例化的類(例如Runtime或System),而無需調用loadClass()。

以下HTTP請求的條件是帶有MVEL表達式的參數(script::Runtime r = Runtime.getRuntime(); r.exec(”touch /tmp/POC”);)。Unomi會解析該值,并以MVEL表達式的形式執行script ::之后的代碼。以下示例中的表達式會創建一個Runtime對象并運行“ touch” OS命令,該命令會在/tmp目錄中創建一個空文件。

image.png

除此之外,還有一種方法可以在OGNL表達式中加載類,而無需觸發loadClass()調用。以下HTTP請求能夠獲取運行時并使用Java Reflections API執行OS命令。

image.png

以上兩種方法能夠繞過1.5.1中引入的安全控制。此外,Unomi包含大量數據并與其它系統緊密集成,因此通常是攻擊者的理想目標。

 

0x02 處置建議

目前Apache Unomi已經發布了1.5.2更新版本。建議及時升級。

緩解措施:

盡量避免將數據放入表達式解釋器中。

下載鏈接:

http://unomi.apache.org/download.html

 

0x03 參考鏈接

https://securityboulevard.com/2020/11/apache-unomi-cve-2020-13942-rce-vulnerabilities-discovered/?

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13942

 

0x04 時間線

2020-11-02  Unomi發布安全更新

2020-11-19  VSRC發布安全通告

 

0x05 附錄

 

CVSS評分標準官網:http://www.first.org/cvss/

 

 

 

image.png