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。