项目介绍
漏洞描述
利用范围
漏洞分析
使用github上POC进行分析复现https://github.com/Warxim/CVE-2022-41852
JXPath除了能够像XPatth一样能够访问XML文档各种元素之外,还能够读取和写入JavaBean的属性,获取和设置数组、集合、映射、透明容器、Servlet 中的各种上下文对象等元素。
JXPath 支持开箱即用的标准 XPath 函数。它还支持“标准”扩展函数(基本上是通往 Java 的桥梁),以及完全自定义的扩展函数。
在org.apache.commons.jxpath.PackageFunctions#getFunction中,存在methodName.equals("new")
这里实例化的xpath表达式设置为了xxx.new(),截取括号前作为方法名,如果调用new方法就被视为实例化,两个判断一个是实例化构造函数,另一个是静态方法。
"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
在获得了org.apache.commons.jxpath.Function对应的这个实例后,会调⽤具体的invoke实现。
最后在调用invoke实现Spring-bean加载,执行恶意代码。
Spring框架中还可以用org.apache.commons.jxpath.functions.MethodFunction这个类。
除了实例化构造函数,Spring框架加载恶意配置的利用之外。还能利用静态方法进行RCE,例如jndi、jdbc等,后续笔者也会进行补充和分析。
此调用也可以直接利用getValue解析表达式。
在Spring中利用远程加载配置来命令执行。
本地用python开启http服务,模拟远程加载。
修复建议
参考材料
3.https://github.com/advisories/GHSA-wrx5-rp7m-mm49
关于Portal Lab
星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。