漏洞复现-Apache Commons Text远程代码执行漏洞(CVE-2022-42889)
1.漏洞描述
Apache Commons Text 是一个低级库,用于执行各种文本操作,例如转义、计算字符串差异以及用通过插值器查找的值替换文本中的占位符。
Apache Commons Text 是一个专注于字符串算法的库。Apache Commons Text 存在远程代码执行漏洞,Apache Commons Text 执行变量插值,允许动态评估和扩展属性。在1.5到1.9版本中,包括一些默认的插值器,如果使用不受信任的配置值,则在受影响版本中使用插值默认值的应用程序可能容易受到远程代码执行的攻击。
2.影响版本
1.5 <= Apache Commons Text <= 1.9
3.漏洞分析
StringSubstitutor.replace方法
调用了substitute解析传入的字符串
方法中解析了头部和尾部的${},把其中的值取出来进一步解析
这里获取的StringLookup就是之前使用StringSubstitutor.createInterpolator()创建实例化对象的地方
并在构造方法中调用了this.setVariableResolver(variableResolver)设置VariableResolver为InterpolatorStringLookup类,之后继续跟入InterpolatorStringLookup的lookup方法中。
方法截取了":"前面的script关键词,并以此为索引获取对应的StringLookup对象
可以看到系统支持的类型有18种操作方式
并在后续调用了ScriptStringLookup.lookup方法
之后的代码就是获取js脚本引擎,并通过ScriptEngine.eval的方法执行
4.修复建议
修复建议
升级版本到Apache Commons Text 1.10.0版本。
下载地址:https://commons.apache.org/proper/commons-text/download_text.cgi