Skip to main content

xmldom CVE-2026-83607

| EUVDEUVD-2026-69217 HIGH
XML Injection (aka Blind XPath Injection) (CWE-91)
2026-09-01 GitHub_M GHSA-w2rr-34g9-rvrj
8.7
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Supply malformed tag name as user input
  2. Delivery
    Application calls createElement(attackerString) without validation
  3. Exploit
    XMLSerializer.serializeToString() emits name verbatim into XML/HTML
  4. Execution
    Browser parses injected markup
  5. Impact
    Attacker 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

xmldom ≤ 0.6.0
xmldom 0.7.0, < 0.8.14
xmldom 0.9.0, < 0.9.11

Affected Packages

npm @xmldom/xmldom fix: 0.8.14, 0.9.11
npm xmldom fix: 0.8.14, 0.9.11

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

Vendor (GitHub_M) PRIMARY 8.7 HIGH
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
vuln.today AI 4.7 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
SUSE 7.1 HIGH
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
Red Hat 8.1 HIGH

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 01, 2026 - 16:02 EUVD
CVE Published
Sep 01, 2026 - 14:23 cve.org
HIGH 8.7

DescriptionCVE.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
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.3%
Top 72% exploitable
Prevalence
Medium
popular npm XML/DOM library, widely used in Node.js tooling
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
8 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA MSRC Vendor GitHub VulDB

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

64
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

More in Xmldom

View all
CVE-2022-39353 CRITICAL POC
9.8 Nov 02

xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2 Core) `DOMParser` and `XMLSerializer` module. Rated crit

CVE-2026-83610 MEDIUM POC
6.3 Sep 01

XML injection via EntityReference in xmldom enables attacker-controlled XML markup to escape entity-reference boundaries

CVE-2022-37616 CRITICAL
9.8 Oct 11

A prototype pollution vulnerability exists in the function copy in dom.js in the xmldom (published as @xmldom/xmldom) pa

CVE-2026-83615 HIGH POC
8.7 Sep 01

Quadratic namespace-map allocation in xmldom's SAX parser allows unauthenticated remote attackers to exhaust the Node.js

CVE-2026-83614 HIGH POC
8.7 Sep 01

Two independent quadratic-complexity denial-of-service paths in the xmldom JavaScript XML parser allow remote unauthenti

CVE-2026-83616 HIGH POC
8.7 Sep 01

Processing-instruction target injection in the @xmldom/xmldom JavaScript library allows XML structure breakout through u

CVE-2026-83608 HIGH POC
8.7 Sep 01

XML injection in the xmldom serializer allows a crafted DocumentType.name containing '>' or whitespace to prematurely cl

CVE-2026-83605 HIGH POC
8.7 Sep 01

XML injection in the xmldom JavaScript library allows crafted attribute names to break out of attribute context during s

CVE-2026-83613 HIGH POC
8.7 Sep 01

Quadratic attribute-processing complexity in xmldom's DOMParser enables remote unauthenticated denial of service against

CVE-2026-83618 HIGH POC
8.7 Sep 01

XML injection in @xmldom/xmldom versions 0.9.10 and 0.9.11 bypasses the requireWellFormed serializer's DocumentType vali

CVE-2026-83617 HIGH POC
8.7 Sep 01

XML injection in @xmldom/xmldom 0.9.11 allows attackers who supply crafted element or attribute names containing ECMAScr

CVE-2026-83609 HIGH POC
8.7 Sep 01

XML injection in @xmldom/xmldom 0.9.0-0.9.11 allows an attacker to embed malicious markup into serialized XML output by

Vendor 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

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy