CVE-2026-24400CVE-2026-24400是AssertJ库中的一个高危XML外部实体(XXE)注入漏洞。AssertJ是一个流行的Java测试断言库,提供流式API用于编写测试断言。该漏洞存在于org.assertj.core.util.xml.XmlStringPrettyFormatter类中的toXmlDocument(String)方法,该方法在初始化DocumentBuilderFactory时使用了默认设置,未禁用DTD处理和外部实体解析。当应用程序使用isXmlEqualTo(CharSequence)断言或xmlPrettyFormat(String)方法处理来自不可信源的XML输入时,攻击者可以利用此漏洞读取服务器上的任意本地文件(如/etc/passwd、配置文件等),发起服务器端请求伪造(SSRF)攻击,或通过"Billion Laughs"实体扩展攻击造成拒绝服务(DoS)。由于CVSS评分高达9.1且利用复杂度低,此漏洞对使用受影响版本的应用程序构成严重威胁。
该漏洞的根本原因在于XmlStringPrettyFormatter类的toXmlDocument(String)方法在创建XML解析器时使用了未经过安全配置的DocumentBuilderFactory。具体问题包括:1) 未调用setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true)启用安全处理;2) 未调用setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)禁止DTD声明;3) 未调用setFeature("http://xml.org/sax/features/external-general-entities", false)禁用外部实体;4) 未调用setXIncludeAware(false)禁用XInclude支持;5) 未调用setExpandEntityReferences(false)禁用实体引用展开。攻击者可以通过构造包含<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>等恶意DTD的XML输入,利用file://、http://等协议URI读取敏感文件或发起SSRF攻击。"Billion Laughs"攻击则通过递归定义大量实体(如<!ENTITY lol "lol..."><!ENTITY lol2 "&lol;&lol;...">)消耗大量内存导致解析器崩溃。