CVE-2024-31573CVE-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。