Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply malformed tag name as user input
-
DeliveryApplication calls createElement(attackerString) without validation
-
ExploitXMLSerializer.serializeToString() emits name verbatim into XML/HTML
-
ExecutionBrowser parses injected markup
-
ImpactAttacker script executes in victim's browser context
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 three concurrent application-level conditions: (1) attacker-controlled input must be passed as the tagName argument to Document.createElement() without prior validation against the XML QName production; (2) the resulting DOM node must be serialized via XMLSerializer.serializeToString() - either with the default options or with requireWellFormed: true on an unpatched version, since the validation was missing in both paths; and (3) the serialized XML or HTML output must be delivered to and rendered by a web browser. The vulnerability does not affect server-side XML processing where output is never browser-rendered. The legacy xmldom package has no fix and remains permanently vulnerable. The @xmldom/xmldom package's requireWellFormed: true option now acts as a hard gate in patched versions, but relied on application opt-in and was silently broken before the fix. |
| Impact | The CVSS 4.0 score of 8.7 with vector AV:N/AC:L/AT:N/PR:N/UI:N reflects the library's raw API surface - no authentication or user interaction is required to call createElement with a malicious string. However, real-world exploitability is conditional: an attacker must control a string that reaches createElement(), the application must then serialize the DOM, and the output must be rendered by a browser. These application-level preconditions introduce meaningful friction not captured in the provided vector. No EPSS score was supplied in the intelligence data, so exploitation probability cannot be quantified. The vulnerability is not listed in the CISA KEV catalog, and no standalone public exploit code has been identified - however, the PR test cases (e.g., createElement('x><inject')) function as working proof-of-concept demonstrations embedded in the patch. The legacy xmldom package receives no fix, creating a permanent risk for projects that have not migrated to @xmldom/xmldom. The scope of impact is bounded by how widely applications expose attacker-controlled XML serialization to browsers, making this a significant but context-dependent risk rather than a universally exploitable critical flaw. |
| Exploit ScenarioDerived | An attacker submits a crafted product name such as 'item><script>alert(1)</script><x' through an application form. The server-side code passes this value directly to document.createElement() in an xmldom-based XML builder, then serializes the document with XMLSerializer.serializeToString() and returns the result as an API response rendered by the browser. The injected script tag executes in the victim's browser context, enabling session theft or DOM manipulation. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 01, 2026
XML injection and cross-site scripting in the xmldom JavaScript library allows attacker-controlled tag names to be injected verbatim into serialized XML or HTML output. Applications using @xmldom/xmldom prior to 0.8.14 or 0.9.11, or the legacy xmldom package at any version, are affected when they pass externally-supplied strings to Document.createElement() and then serialize the resulting DOM with XMLSerializer.serializeToString(). The serializer's requireWellFormed: true path failed to validate element qualified names and synthesized xmlns:PREFIX declarations against the XML QName production, meaning malformed names containing characters such as '>' or '<' pass through unchecked and cause XSS when the output is rendered in a browser. No public exploit has been identified at time of analysis, though the GitHub security advisory and PR diffs include explicit test cases demonstrating injection payloads.
RemediationAI
For projects using @xmldom/xmldom, upgrade to version 0.8.14 (release tag confirmed at https://github.com/xmldom/xmldom/releases/tag/0.8.14) or 0.9.11 (https://github.com/xmldom/xmldom/releases/tag/0.9.11). No patched version exists for the legacy xmldom package; projects must migrate to @xmldom/xmldom and apply the upgrade. As a compensating control pending migration, applications should validate all externally-supplied strings against the XML QName production (regex: [a-zA-Z_][\w.-]*(:[a-zA-Z_][\w.-]*)?) before passing them to createElement() - this blocks injection at the application boundary with no change to library behavior. Alternatively, enable requireWellFormed: true in the patched @xmldom/xmldom releases, which now throws on invalid names rather than emitting them verbatim; note this option will cause runtime exceptions on any pre-existing malformed names in the DOM, so audit application inputs before enabling it in production. Upstream fix commits are cba1321218b069182695813fa7565653708e172e and d8212e632507eaf1d9f609657dd4c56abeb12d44.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
xmldom is a pure JavaScript implementation of the W3C DOM Level 2 Core specification, used predominantly in Node.js to parse and manipulate XML/HTML without a native DOM. The affected CPE entries are cpe:2.3:a:xmldom:xmldom:*:*:*:*:*:*:*:* (legacy npm package 'xmldom' up to and including 0.6.0, with no fix planned) and cpe:2.3:a:@xmldom:xmldom:*:*:*:*:*:*:*:* (maintained '@xmldom/xmldom' package, fixed in 0.8.14 and 0.9.11). The root cause, classified as CWE-91 (XML Injection), lies in Document.createElement(tagName): it stores the supplied tagName without validating it against the XML QName production defined in the XML 1.0 specification. When XMLSerializer.serializeToString() later emits the element, it writes the raw, unvalidated name into the output stream. The requireWellFormed: true serializer option was documented as providing additional validation but - as the PR #1043 diff confirms - QName validation for elements and attributes was explicitly marked 'not implemented' in prior releases. The fix adds a g.QName_exact regex gate inside both addSerializedAttribute() and the element-name path of serializeToString(), throwing a DOMException InvalidStateError on any name that fails the QName production.
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
AC:H for required application preconditions (attacker input reaching createElement and output browser-rendered); UI:R and S:C for classic XSS; C:L/I:L for DOM injection impact.
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. Prior to @xmldom/xmldom versions 0.8.14 and 0.9.11, and in xmldom version 0.6.0 and earlier, Document.createElement(tagName) stores an unvalidated element name and XMLSerializer.serializeToString() emits that name verbatim. The requireWellFormed: true path did not validate the element qualified name or synthesized xmlns:PREFIX declaration, so attacker-controlled tag names could inject attributes, elements, or processing instructions into serialized XML or HTML and could cause cross-site scripting when browser-consumed. The unchecked values violate the XML QName constraint, and default serialization and creation-time createElement() behavior remain permissive. This issue is fixed in @xmldom/xmldom versions 0.8.14 and 0.9.11; no fixed version is available for xmldom.
Blast Radius
ecosystem impact- 4 npm packages depend on @xmldom/xmldom (4 direct, 0 indirect)
- 2,014 npm packages depend on xmldom (861 direct, 1,179 indirect)
Ecosystem-wide dependent count for version 0.9.0 and other introduced versions.
Technical POC Analysis
CWE-91 (XML Injection).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
The xmldom JavaScript library contains XML injection and XSS vulnerabilities in DOM serialization that allow attackers to inject malicious tag names into serialized XML and HTML output, potentially enabling XSS attacks when rendered in browsers. Affected versions include @xmldom/xmldom prior to 0.8.14 and 0.9.11, as well as the legacy xmldom package at all versions. Organizations using xmldom should immediately identify affected dependencies and upgrade to remediate this high-severity vulnerability.
Apply vendor patch: upgrade @xmldom/xmldom to version 0.8.14 or 0.9.11 or later. For legacy xmldom package (no vendor-released patch identified at time of analysis): (1) Implement input validation to reject or sanitize user-supplied strings before passing to DOM construction methods, particularly characters that could break XML syntax; (2) Maintain a whitelist of allowed XML element names and validate all createElement() calls against it; (3) Deploy Web Application Firewall rules to detect serialized XML output containing injection patterns; (4) Configure Content Security Policy with strict script-src directives to limit XSS blast radius; (5) Establish expedited timeline to migrate from legacy xmldom to patched @xmldom/xmldom version.
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
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
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 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.11 allows attackers who supply crafted element or attribute names containing ECMAScr
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-69217
GHSA-w2rr-34g9-rvrj
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB