CVE-2020-13942 | Apache Unomi遠程代碼執行漏洞通告
發布時間 2020-11-190x00 漏洞概述
CNVD ID | CVE-2020-13942 | 時 間 | 2020-11-19 |
類 型 | RCE | 等 級 | 嚴重 |
遠程利用 | 是 | 影響范圍 | Apache Unomi < 1.5.2 |
0x01 漏洞詳情
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目錄中創建一個空文件。
除此之外,還有一種方法可以在OGNL表達式中加載類,而無需觸發loadClass()調用。以下HTTP請求能夠獲取運行時并使用Java Reflections API執行OS命令。
以上兩種方法能夠繞過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/