Text4Shell漏洞技術分析,交易所等機構需注意

cve編號/ cve id

CVE-2022-42889

描述

Apache Commons Text支持執行變量插值,標準格式是“${prefix:name}”,其中“prefix”用於定位org.apache.commons.text.lookup.StringLookup的實例。從1.5版到1.9版,默認lookup實例集如:script使用JVM 腳本執行引擎javax.script執行表達式、 dns用於解析dns記錄、url用於發起任意http請求。

如果使用了不受信任的配置值,則受影響的應用程序容易受到遠程代碼執行,該漏洞NVD評分為9.8。

Apache Commons Text作為Java語言的基礎組件,其安全性需要各Web3項目方提高重視,及時關注各種Web3基礎架構的安全漏洞並及時打好補丁,以避免潛在的安全風險和數字資產損失。我們將及時挖掘,追踪各種web3上的安全風險,以及提供領先的安全解決方案,確保web3世界鏈上,鏈下安全無虞。

受影響版本

>=1.5 <=1.9

分析

閱讀官方1.9文檔時,看到以下內容

Text4Shell漏洞技術分析,交易所等機構需注意

通過script插值執行javascript運算,得到結果:

Text4Shell漏洞技術分析,交易所等機構需注意

根據漏洞描述script使用JVM 腳本執行引擎(javax.script),猜測StringSubstitutor.replace方法處理script插值時可能執行任意java代碼。

Text4Shell漏洞技術分析,交易所等機構需注意

分析入口StringSubstitutor.replace,調用了substitute方法處理傳入的字符串

Text4Shell漏洞技術分析,交易所等機構需注意

進行處理${}字符,取出再進行解析,跟入resolveVariable方法

Text4Shell漏洞技術分析,交易所等機構需注意

繼續跟進StringLookup對象的lookup方法

Text4Shell漏洞技術分析,交易所等機構需注意

在stringLookupMap初始化了其他插值,插值對應不同lookup實例

Text4Shell漏洞技術分析,交易所等機構需注意

當前傳入是script,lookup實例對應ScriptStringLookup類的lookup方法

Text4Shell漏洞技術分析,交易所等機構需注意

在該方法中,最終調用scriptEngine.eval觸發漏洞。

Text4Shell漏洞技術分析,交易所等機構需注意

​調用堆

Text4Shell漏洞技術分析,交易所等機構需注意

修復

在1.10.0版本中stringLookupMap集合初始化時不再有script,lookup為null時,既沒有找到對應實例。

Text4Shell漏洞技術分析,交易所等機構需注意

其他插值的利用

任意文件讀取

​${file:UTF-8:/etc/passwd}

此時為lookup實例為FileStringLookup類

Text4Shell漏洞技術分析,交易所等機構需注意

lookup方法讀取文件返回

Text4Shell漏洞技術分析,交易所等機構需注意

結果

Text4Shell漏洞技術分析,交易所等機構需注意

DNS探測

${dns:127.0.0.1|test.xxx.xxx}

用於無損檢測

Text4Shell漏洞技術分析,交易所等機構需注意

HTTP 請求

可用於ssrf探測端口

Example: ${url:UTF-8:http://127.0.0.1:2121}

Text4Shell漏洞技術分析,交易所等機構需注意

總結

該漏洞payload看起來類似於log4shell,很容易被攻擊者利用,有些人已經開始將其稱為“Text4Shell”或“Act4Shell”。

建議各Web3項目方提高重視,及時升級到Apache Commons Text 1.10.0,默認情況下禁用有問題的插值器,以避免潛在的安全風險和數字資產損失。如有任何疑問或技術交流,歡迎聯繫我們operation@numencyber.com。