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。