Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply crafted node name with embedded line terminator
-
DeliverySubmit to application that builds DOM from attacker input
-
ExploitApplication serializes DOM with requireWellFormed: true
-
ExecutionMultiline regex accepts name, emits injected markup verbatim
-
PersistDownstream parser or system processes malformed XML
-
ImpactXML structure integrity compromised
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization XPath query parameterization
|
| Exploitation Conditions | Exploitation requires two specific conditions to be simultaneously true: (1) the application must invoke XMLSerializer.serializeToString() with the explicit option { requireWellFormed: true } - this is a non-default setting that developers opt into specifically to enforce strict XML name validation; and (2) the attacker must control an element name, attribute name, or the node passed to serialization - for example, via a user-supplied XML document parsed by DOMParser that is later re-serialized, or via an API that allows clients to set node names. The default serialization path (without requireWellFormed) carries no strict name guarantee and was already outside the injection protection scope. Exploitation is limited to Node.js server-side environments where xmldom is installed; browser-native XML APIs are unaffected. Authentication requirements depend entirely on the host application; the CVSS PR:N vector indicates no library-level privilege requirement, but most realistic deployments will require at least an HTTP session to reach the affected code path. |
| Impact | The CVSS 4.0 score of 8.7 (AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H) reflects network-reachable, unauthenticated, high-integrity-impact exploitation, which is accurate for the worst-case deployment. However, exploitation is gated on a non-default configuration: the attacker must reach code that invokes XMLSerializer.serializeToString() with the requireWellFormed: true option AND accepts attacker-controlled node names - a narrower attack surface than the raw score implies. Applications using the default serialization path are outside the strict guarantee but also outside this specific bypass. EPSS data was not provided in the intelligence set; KEV status is negative, and no public proof-of-concept has been identified, so real-world exploitation has not been observed at time of analysis. The vulnerability class (injection bypass in a widely-used npm library) carries meaningful downstream risk because xmldom is frequently used as a dependency in XML-processing pipelines that may pass attacker-controlled content. The integrity signal is high and credible; the practical priority is somewhat moderated by the requireWellFormed condition, but teams relying on that flag for security guarantees should treat this as urgent. |
| Exploit ScenarioDerived | An attacker submits a crafted XML document or API payload whose element name is encoded as foo\nbar><inject/>, where \n is a literal line feed. When the consuming application builds a DOM node with this name and serializes it via XMLSerializer.serializeToString({ requireWellFormed: true }), the multiline-anchored QName regex matches foo on the first line and accepts the name as valid; the serialized output includes the injected markup bar><inject/> verbatim, corrupting any downstream system that re-parses the document. No public proof-of-concept code has been identified, but the bypass technique is straightforward to reproduce from the advisory description. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 01, 2026
XML injection in @xmldom/xmldom 0.9.11 allows attackers who supply crafted element or attribute names containing ECMAScript line terminators (U+000A, U+000D, U+2028, U+2029) to bypass the requireWellFormed: true serialization guard and emit arbitrary markup verbatim into serialized XML output. The bypass exploits the multiline flag inherited by the QName_exact regex in lib/grammar.js, which causes the anchors to match at line boundaries rather than string boundaries - directly circumventing the strict-name validation introduced to close earlier injection advisories. No public exploit has been identified at time of analysis, and the vulnerability is not listed in the CISA KEV catalog.
RemediationAI
Upgrade @xmldom/xmldom to version 0.9.12, which is the vendor-released patch confirmed by the GitHub release tag at https://github.com/xmldom/xmldom/releases/tag/0.9.12 and commit 7b2ec67e1750daadd0bb06c92e875e726544a362 (PR #1071). The fix re-anchors the QName_exact regex so that interior line terminators cause name validation to fail with InvalidStateError rather than pass silently. If immediate upgrade is not feasible, teams relying on requireWellFormed: true for security should add an explicit application-layer filter that rejects any element or attribute name containing U+000A, U+000D, U+2028, or U+2029 before passing names to DOM construction APIs; this trades some flexibility for defense-in-depth during the remediation window. Applications that do not use requireWellFormed: true were already outside the strict-serialization guarantee and are unaffected by this specific bypass, though upgrading remains advisable given the breadth of security fixes in 0.9.12.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
xmldom (cpe:2.3:a:xmldom:xmldom:*) is a pure JavaScript implementation of the W3C DOM Level 2 Core spec, widely used as a server-side XML parser and serializer in Node.js environments. The root cause is CWE-91 (XML Injection): the reg() helper in lib/grammar.js produces the QName_exact validation regex with the multiline (m) flag active, causing the ^ and $ anchors to match at embedded newline positions rather than exclusively at the start and end of the full name string. Consequently, XMLSerializer.serializeToString() under { requireWellFormed: true } accepts a name such as valid-name\nmalicious-markup> as conforming, because the regex matches valid-name on the first line and ignores everything after U+000A. The injected content is then emitted verbatim into element start/end tags or attribute name positions in the serialized document. This is a bypass of the security controls introduced for GHSA-jxjr-3g7g-3944 and related advisories; the default serialization path (without requireWellFormed) carries no strict guarantee and is unaffected.
Know when Xmldom gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
Network-reachable with no authentication at the library level; integrity-only impact as the bypass injects markup into serialized output with no confidentiality or availability consequence.
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2 Core) DOMParser and XMLSerializer module. From 0.9.11 until 0.9.12, the requireWellFormed: true element and attribute name checks use the anchored QName_exact expression produced by reg() in lib/grammar.js, which inherits the multiline flag. A name with a valid first line followed by U+000A, U+000D, U+2028, or U+2029 and breakout markup therefore passes validation and is emitted verbatim in element start and end tags or attribute names. This bypasses the strict-serialization checks introduced for the earlier element-name and attribute-name injection advisories, while the default serialization path remains outside the strict guarantee. This issue is fixed in @xmldom/xmldom version 0.9.12.
Blast Radius
ecosystem impact- 17 npm packages depend on @xmldom/xmldom (8 direct, 9 indirect)
Ecosystem-wide dependent count for version 0.9.11.
Technical POC Analysis
CWE-91 (XML Injection), with CWE-625 (Permissive Regular Expression) assigned as the mechanism.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Applications using @xmldom/xmldom 0.9.11 are exposed to a HIGH severity XML injection vulnerability (CVSS 8.7) that bypasses the library's serialization safety controls, enabling attackers to inject arbitrary markup into XML output. This affects any system processing untrusted XML element or attribute names and could compromise data integrity and enable downstream attacks. With no patch currently available, immediate mitigation and inventory is required.
No vendor-released patch identified at time of analysis. Implement input validation to reject ECMAScript line terminators (U+000A, U+000D, U+2028, U+2029) in element and attribute names; apply output encoding for serialized XML; disable requireWellFormed flag if compatible with operational requirements; evaluate migration to hardened XML processing libraries.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2 Core) `DOMParser` and `XMLSerializer` module. Rated crit
XML injection via EntityReference in xmldom enables attacker-controlled XML markup to escape entity-reference boundaries
A prototype pollution vulnerability exists in the function copy in dom.js in the xmldom (published as @xmldom/xmldom) pa
Quadratic namespace-map allocation in xmldom's SAX parser allows unauthenticated remote attackers to exhaust the Node.js
Two independent quadratic-complexity denial-of-service paths in the xmldom JavaScript XML parser allow remote unauthenti
Processing-instruction target injection in the @xmldom/xmldom JavaScript library allows XML structure breakout through u
XML injection in the xmldom serializer allows a crafted DocumentType.name containing '>' or whitespace to prematurely cl
XML injection and cross-site scripting in the xmldom JavaScript library allows attacker-controlled tag names to be injec
XML injection in the xmldom JavaScript library allows crafted attribute names to break out of attribute context during s
Quadratic attribute-processing complexity in xmldom's DOMParser enables remote unauthenticated denial of service against
XML injection in @xmldom/xmldom versions 0.9.10 and 0.9.11 bypasses the requireWellFormed serializer's DocumentType vali
XML injection in @xmldom/xmldom 0.9.0-0.9.11 allows an attacker to embed malicious markup into serialized XML output by
Same weakness CWE-91 – XML Injection (aka Blind XPath Injection)
View allVendor StatusVendor
SUSE
Severity: Important| Product | Status |
|---|---|
| SUSE Linux Enterprise Desktop 15 SP7 | Not-Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP7 | Not-Affected |
| SUSE Linux Enterprise Server 15 SP7 | Not-Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP7 | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP6 | Affected |
| SUSE Linux Enterprise Module for Server Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Module for Server Applications 15 SP5 | Affected |
| SUSE Linux Enterprise Server 15 SP4 | Affected |
| SUSE Linux Enterprise Server 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP5 | Affected |
| SUSE Linux Enterprise Server 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP6 | Affected |
| SUSE Linux Enterprise Server 15 SP6-LTSS | Not-Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP5 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP6 | Not-Affected |
| SUSE CaaS Platform 4.0 | Not-Affected |
| SUSE Enterprise Storage 6 | Not-Affected |
| SUSE Enterprise Storage 7 | Not-Affected |
| SUSE Enterprise Storage 7.1 | Affected |
| SUSE Linux Enterprise Desktop 15 SP6 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP1 | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP1-ESPOS | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP1-LTSS | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP2 | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP2-ESPOS | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP2-LTSS | Not-Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP3 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP3-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP3-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-ESPOS | Affected |
| SUSE Linux Enterprise Module for Server Applications 15 SP1 | Not-Affected |
| SUSE Linux Enterprise Module for Server Applications 15 SP2 | Not-Affected |
| SUSE Linux Enterprise Module for Server Applications 15 SP3 | Affected |
| SUSE Linux Enterprise Real Time 15 SP2 | Not-Affected |
| SUSE Linux Enterprise Real Time 15 SP3 | Affected |
| SUSE Linux Enterprise Real Time 15 SP4 | Affected |
| SUSE Linux Enterprise Server 15 SP1 | Not-Affected |
| SUSE Linux Enterprise Server 15 SP1-BCL | Not-Affected |
| SUSE Linux Enterprise Server 15 SP1-LTSS | Not-Affected |
| SUSE Linux Enterprise Server 15 SP2 | Not-Affected |
| SUSE Linux Enterprise Server 15 SP2-BCL | Not-Affected |
| SUSE Linux Enterprise Server 15 SP2-LTSS | Not-Affected |
| SUSE Linux Enterprise Server 15 SP3 | Affected |
| SUSE Linux Enterprise Server 15 SP3-BCL | Affected |
| SUSE Linux Enterprise Server 15 SP3-LTSS | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP1 | Not-Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP2 | Not-Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP3 | Affected |
| SUSE Manager Proxy 4.0 | Not-Affected |
| SUSE Manager Proxy 4.1 | Not-Affected |
| SUSE Manager Proxy 4.2 | Affected |
| SUSE Manager Proxy 4.3 | Affected |
| SUSE Manager Proxy LTS 4.3 | Affected |
| SUSE Manager Retail Branch Server 4.0 | Not-Affected |
| SUSE Manager Retail Branch Server 4.1 | Not-Affected |
| SUSE Manager Retail Branch Server 4.2 | Affected |
| SUSE Manager Retail Branch Server 4.3 | Affected |
| SUSE Manager Retail Branch Server LTS 4.3 | Affected |
| SUSE Manager Server 4.0 | Not-Affected |
| SUSE Manager Server 4.1 | Not-Affected |
| SUSE Manager Server 4.2 | Affected |
| SUSE Manager Server 4.3 | Affected |
| SUSE Manager Server LTS 4.3 | Affected |
| openSUSE Leap 15.3 | Affected |
| openSUSE Leap 15.4 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Not-Affected |
EUVD-2026-69241
GHSA-jxjr-3g7g-3944
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB