Apache Commons JXPath 任意代码执行漏洞(CVE-2022-41852)

Apache Commons JXPath 是一个 XPath 表达式语言的简单解释器。JXPath 将 XPath 表达式应用于各种类型的对象如: JavaBeans、 Maps、 Servlet contexts 和 DOM 等,对于喜欢 XML 风格 API 的开发者来说 JXPath 是一个高效的工具。

近期有安全研究者通过 oss-fuzz 发现 JXPath 存在任意代码执行漏洞(CVE-2022-41852),建议开发人员留意自己是否在使用该组件。

漏洞简述

commons-jxpath:commons-jxpath 在1.3 (2008 年发布,官方暂未发布新版本)及之前版本中存在任意代码执行漏洞,使用 JXPath 来解释不受信任的 XPath 表达式时容易受到远程代码执行漏洞影响,除了 compile() 和 compilePath() 函数以外所有处理 XPath 字符串的 JXPathContext 类中的函数都容易受到攻击。攻击者可以使用 XPath 表达式从类路径加载任意 Java 类,从而导致任意代码执行。

漏洞分析

背景

2022年9月30日,安全研究人员通过oss-fuzz在 org.apache.commons.jxpath 中捕获到`java.lang.Class.forName` 异常所形成的 Crash。

Apache Commons JXPath 任意代码执行漏洞(CVE-2022-41852)

原因

newContext(Object contextBean)方法为例,该方法使用指定的对象作为根节点创建一个新的 JXPathContext。调用 JXPathContext.getValue方法通过XPath获取JXPathContext对象的属性时,如果传入的contextBean不存在于 CLASSPATH 中会引发异常。

没开8090端口的服务(异常):

Apache Commons JXPath 任意代码执行漏洞(CVE-2022-41852)

获取本地 CLASSPATH 中的属性(没有异常):

Apache Commons JXPath 任意代码执行漏洞(CVE-2022-41852)

由于处理 XPath 字符串的 JXPathContext 类中的函数是通过`Class.forName`反射加载的传入的 XPath 字符串 , 而且可以通过外部控制输入来选择类或代码,攻击者可利用此机制加载任意恶意Java类。

漏洞复现

  1. 加载本地任意恶意代码

通过newContext(Object contextBean)方法生成一个JXPathContext对象,传入的contextBean可以是同一个 CLASSPATH 中包含恶意代码的Java类。

Apache Commons JXPath 任意代码执行漏洞(CVE-2022-41852)
  1. 加载远程恶意代码
  • 在本地8099端口开启一个web服务,并自定义bean.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean class="java.lang.ProcessBuilder" init-method="start">
        <constructor-arg>
            <value>calc.exe</value>
        </constructor-arg>
    </bean>
</beans>
  • 通过 spring 的 ClassPathXmlApplicationContext 类读取远程 xml 加载到攻击者本地CLASSPATH 中。通过 JXPath 不安全的反射机制造成远程代码执行
Apache Commons JXPath 任意代码执行漏洞(CVE-2022-41852)

不安全的反射所带来的影响

  • 攻击者能够执行攻击者无法直接访问的代码;
  • 攻击者可以在错误的位置或时间调用其它代码会更改关键的系统状态。
  • 攻击者能够使用反射来调用错误的代码,通过使用错误的 API 参数,导致应用程序退出或挂起,也会触发运行时错误,从而泄露错误消息中的敏感信息。

给开发者的建议

漏洞修复建议

漏洞详情页:https://www.oscs1024.com/hd/MPS-2022-58476

检测项目安全风险:https://www.murphysec.com/

  • org.apache.commons.jxpath 暂未发布补丁,请关注官方公告:https://commons.apache.org/proper/commons-jxpath/
  • 避免使用 jxpath 直接处理用户输入,需要对用户传入的数据进行过滤校验

开发建议

尽量通过重构代码来避免使用反射功能代码。

发布者:墨菲安全,转发请注明出处:https://www.murphysec.com/blog/uncategorized/4488.html

(0)
上一篇 2023年1月9日 15:07
下一篇 2023年1月9日 15:13

相关推荐

  • 从近期欧美法规看软件供应链安全趋势

    前言 近期美国和欧盟都发布了新的供应链安全相关要求法案,要求厂商评估供应链数字化产品的安全性,此举旨在保护供应链安全,防止SolarWinds 等安全事件的再次发生。 美国和欧盟在各自的法案都提到了软件安全检测,软件物料清单(SBOM)等内容,这意味着通过强制性的网络安全法规要求,企业必须通过披露SBOM、源代码安全检测等手段提升数字化产品安全性,才能继续正…

    2023年1月9日
  • 软件供应链安全2022年回顾

    Gartner认为软件供应链攻击是2022年的主要的威胁来源,有人将2022年称为软件供应链安全元年,是新上任CIO的首要工作,越来越多开发者、安全研究人员在关注软件供应链安全。 我们通过梳理漏洞和开源组件数量变化、相关的漏洞风险事件、法规和标准、产品能力关注点,来对软件供应链安全这一领域进行回顾。 可以看到: 我们观察发现在软件供应链安全产品能力上,除了基…

    2023年2月1日

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-180-9568

邮件:hi@murphysec.com

工作时间:周一至周五,10:00-19:00,节假日休息

关注公众号

20230105-100741