cve編號/ cve id
描述
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文檔時,看到以下內容
通過script插值執行javascript運算,得到結果:
根據漏洞描述script使用JVM 腳本執行引擎(javax.script),猜測StringSubstitutor.replace方法處理script插值時可能執行任意java代碼。
分析入口StringSubstitutor.replace,調用了substitute方法處理傳入的字符串
進行處理${}字符,取出再進行解析,跟入resolveVariable方法
繼續跟進StringLookup對象的lookup方法
在stringLookupMap初始化了其他插值,插值對應不同lookup實例
當前傳入是script,lookup實例對應ScriptStringLookup類的lookup方法
在該方法中,最終調用scriptEngine.eval觸發漏洞。
調用堆
修復
其他插值的利用
任意文件讀取
${file:UTF-8:/etc/passwd}
此時為lookup實例為FileStringLookup類
lookup方法讀取文件返回
結果
${dns:127.0.0.1|test.xxx.xxx}
用於無損檢測
可用於ssrf探測端口
Example: ${url:UTF-8:http://127.0.0.1:2121}
總結
該漏洞payload看起來類似於log4shell,很容易被攻擊者利用,有些人已經開始將其稱為“Text4Shell”或“Act4Shell”。
建議各Web3項目方提高重視,及時升級到Apache Commons Text 1.10.0,默認情況下禁用有問題的插值器,以避免潛在的安全風險和數字資產損失。如有任何疑問或技術交流,歡迎聯繫我們operation@numencyber.com。