#1146473 node-xmldom: CVE-2026-83608 CVE-2026-83609 CVE-2026-83610 CVE-2026-83611 CVE-2026-83612 CVE-2026-83613 CVE-2026-83614 CVE-2026-83615 CVE-2026-83616 CVE-2026-83617 CVE-2026-83618

Package:
src:node-xmldom
Source:
src:node-xmldom
Submitter:
Salvatore Bonaccorso
Date:
2026-09-02 10:23:03 UTC
Severity:
normal
Tags:
#1146473#5
Date:
2026-09-02 09:20:18 UTC
From:
To:
Hi,

The following vulnerabilities were published for node-xmldom.

CVE-2026-83608[0]:
| xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2
| Core) DOMParser and XMLSerializer module. Prior to @xmldom/xmldom
| versions 0.8.15 and 0.9.12, and in xmldom version 0.6.0 and earlier,
| the DOCUMENT_TYPE_NODE branch in lib/dom.js validates publicId,
| systemId, and internalSubset under requireWellFormed: true but emits
| DocumentType.name verbatim. A name containing > or whitespace can
| terminate the <!DOCTYPE ...> declaration and inject sibling markup;
| the value can be supplied through createDocumentType() on the 0.8.x
| and unscoped lines or through a direct DocumentType.name property
| write on every affected line. The default path and legacy creation-
| time behavior remain permissive, while the vulnerable strict path
| fails to enforce an XML Name. This issue is fixed in @xmldom/xmldom
| versions 0.8.15 and 0.9.12; no fixed version is available for
| xmldom.


CVE-2026-83609[1]:
| xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2
| Core) DOMParser and XMLSerializer module. From 0.9.0 until 0.9.12,
| the shared reg() builder in lib/grammar.js compiles the anchored
| QName_exact validator with the multiline flag, so ^ and $ validate
| only one line instead of the complete name. createElementNS,
| createAttributeNS, createDocumentType, and createAttribute
| consequently accept a malformed XML name whose first line is valid
| and whose later text injects markup when serialized through either
| the default path or requireWellFormed: true. The triggering
| ECMAScript line terminators are U+000A, U+000D, U+2028, and U+2029.
| This issue is fixed in @xmldom/xmldom version 0.9.12.


CVE-2026-83610[2]:
| xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2
| Core) DOMParser and XMLSerializer module. Prior to @xmldom/xmldom
| versions 0.8.15 and 0.9.12, and in xmldom version 0.6.0 and earlier,
| Document.createEntityReference(name) accepts an invalid name and the
| ENTITY_REFERENCE_NODE serializer emits the resulting nodeName
| directly in &name; form. Directly serializing the node or fragment
| with XMLSerializer.serializeToString() and requireWellFormed: true
| can therefore break the entity-reference boundary and produce
| attacker-controlled XML markup when reparsed. The parser does not
| ordinarily create these nodes, and element-child insertion is
| rejected, so exploitation requires an application to create and
| directly serialize an EntityReference. This issue is fixed in
| @xmldom/xmldom versions 0.8.15 and 0.9.12; no fixed version is
| available for xmldom.


CVE-2026-83611[3]:
| xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2
| Core) DOMParser and XMLSerializer module. Prior to @xmldom/xmldom
| versions 0.8.15 and 0.9.12, and in xmldom version 0.6.0 and earlier,
| DOMParser.parseFromString() can silently accept an end tag such as
| </a\njunk>, close the element, and discard the trailing content. On
| 0.9.x, the lib/sax.js end-tag validator inherits the multiline flag
| from reg(), allowing the first line to satisfy the anchored XML ETag
| production; older lines have no equivalent residue validation. This
| parser differential can bypass a parse-before-trust well-formedness
| gate, although it does not inject the discarded content; onError on
| 0.9.x and errorHandler on 0.8.x are the relevant reporting
| interfaces. This issue is fixed in @xmldom/xmldom versions 0.8.15
| and 0.9.12; no fixed version is available for xmldom.


CVE-2026-83612[4]:
| xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2
| Core) DOMParser and XMLSerializer module. From 0.9.0-beta.1 until
| 0.9.12, HTML-mode parsing through DOMParser.parseFromString()
| mishandles a mixed-case closing tag for the script, style, textarea,
| or title raw-text elements. parseHtmlSpecialContent, selected by
| isHTMLRawTextElement or isHTMLEscapableRawTextElement, uses a case-
| sensitive indexOf() and then calls substring() with a missing-close
| result of negative one, causing unstable parser progression and
| quadratic output amplification. A small untrusted text/html document
| can consequently consume disproportionate CPU and memory when parsed
| and serialized. This issue is fixed in @xmldom/xmldom version
| 0.9.12.


CVE-2026-83613[5]:
| xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2
| Core) DOMParser and XMLSerializer module. Prior to @xmldom/xmldom
| versions 0.8.15 and 0.9.12, and in xmldom version 0.6.0 and earlier,
| DOMHandler.startElement in lib/dom-parser.js inserts every parsed
| attribute through setAttributeNode, while NamedNodeMap.setNamedItem
| in lib/dom.js calls the linear getNamedItem or getNamedItemNS lookup
| for each insertion. A well-formed element with many distinct
| attributes therefore requires quadratic comparisons during
| DOMParser.parseFromString() and can stall a Node.js event loop
| before application validation. This issue is fixed in @xmldom/xmldom
| versions 0.8.15 and 0.9.12; no fixed version is available for
| xmldom.


CVE-2026-83614[6]:
| xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2
| Core) DOMParser and XMLSerializer module. Prior to @xmldom/xmldom
| versions 0.8.15 and 0.9.12, and in xmldom versions 0.3.0 through
| 0.6.0, two independent quadratic paths can cause denial of service.
| In lib/sax.js, parseElementStartPart repeatedly rescans a malformed
| tag name to the next > during single-character recovery; in
| lib/dom.js, normalize() repeatedly removes and appends adjacent text
| nodes, causing quadratic reindexing and string rebuilding. The first
| path is reachable through default DOMParser.parseFromString()
| processing, while the second is also reachable through a direct
| normalize() call on a programmatically constructed DOM, and
| endDocument invokes that normalization after parsing. This issue is
| fixed in @xmldom/xmldom versions 0.8.15 and 0.9.12; no fixed version
| is available for xmldom.


CVE-2026-83615[7]:
| xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2
| Core) DOMParser and XMLSerializer module. Prior to @xmldom/xmldom
| versions 0.8.15 and 0.9.12, and in xmldom versions 0.1.5 through
| 0.6.0, appendElement in lib/sax.js uses _copy to clone the complete
| currentNSMap for each nested element that declares a new namespace
| prefix. Keeping every ancestor map live on the parse stack creates
| quadratic peak namespace-map storage, so a small highly compressible
| XML document can exhaust the process heap before application
| validation. This issue is fixed in @xmldom/xmldom versions 0.8.15
| and 0.9.12; no fixed version is available for xmldom.


CVE-2026-83616[8]:
| xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2
| Core) DOMParser and XMLSerializer module. Prior to @xmldom/xmldom
| versions 0.8.15 and 0.9.12, and in xmldom version 0.6.0 and earlier,
| Document.createProcessingInstruction(target, data) in lib/dom.js
| accepts an unvalidated target, while the requireWellFormed: true
| serializer checks only for a colon and the reserved case-insensitive
| xml name on 0.9.x and performs no target check on 0.8.x. Because
| serialization emits <?target data?>, a target containing >, ?,
| whitespace, or another invalid XML-name character can break the
| processing-instruction boundary and inject XML structure. This issue
| is fixed in @xmldom/xmldom versions 0.8.15 and 0.9.12; no fixed
| version is available for xmldom.


CVE-2026-83617[9]:
| 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.


CVE-2026-83618[10]:
| xmldom is a pure JavaScript W3C standard-based (XML DOM Level 2
| Core) DOMParser and XMLSerializer module. From 0.9.10 until 0.9.12,
| the requireWellFormed: true serializer validates
| DocumentType.publicId and DocumentType.systemId with
| PubidLiteral_match and SystemLiteral_match expressions produced by
| reg() in lib/grammar.js, which inherit the multiline flag. A
| complete valid literal on the first line can therefore satisfy the
| matcher while U+000A, U+000D, U+2028, or U+2029 and breakout markup
| remain in the emitted <!DOCTYPE ...> declaration. This bypasses the
| strict-serialization mitigation for the earlier DocumentType
| injection advisory; creation and direct property assignment remain
| unvalidated by design. This issue is fixed in @xmldom/xmldom version
| 0.9.12.


If you fix the vulnerabilities please also make sure to include the
CVE (Common Vulnerabilities & Exposures) ids in your changelog entry.

For further information see:

[0] https://security-tracker.debian.org/tracker/CVE-2026-83608
https://www.cve.org/CVERecord?id=CVE-2026-83608
[1] https://security-tracker.debian.org/tracker/CVE-2026-83609
https://www.cve.org/CVERecord?id=CVE-2026-83609
[2] https://security-tracker.debian.org/tracker/CVE-2026-83610
https://www.cve.org/CVERecord?id=CVE-2026-83610
[3] https://security-tracker.debian.org/tracker/CVE-2026-83611
https://www.cve.org/CVERecord?id=CVE-2026-83611
[4] https://security-tracker.debian.org/tracker/CVE-2026-83612
https://www.cve.org/CVERecord?id=CVE-2026-83612
[5] https://security-tracker.debian.org/tracker/CVE-2026-83613
https://www.cve.org/CVERecord?id=CVE-2026-83613
[6] https://security-tracker.debian.org/tracker/CVE-2026-83614
https://www.cve.org/CVERecord?id=CVE-2026-83614
[7] https://security-tracker.debian.org/tracker/CVE-2026-83615
https://www.cve.org/CVERecord?id=CVE-2026-83615
[8] https://security-tracker.debian.org/tracker/CVE-2026-83616
https://www.cve.org/CVERecord?id=CVE-2026-83616
[9] https://security-tracker.debian.org/tracker/CVE-2026-83617
https://www.cve.org/CVERecord?id=CVE-2026-83617
[10] https://security-tracker.debian.org/tracker/CVE-2026-83618
https://www.cve.org/CVERecord?id=CVE-2026-83618

Regards,
Salvatore

#1146473#10
Date:
2026-09-02 10:20:33 UTC
From:
To:
We believe that the bug you reported is fixed in the latest version of
node-xmldom, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1146473@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Xavier Guimard <yadd@debian.org> (supplier of updated node-xmldom package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
Format: 1.8
Date: Wed, 02 Sep 2026 11:28:31 +0200
Source: node-xmldom
Architecture: source
Version: 0.9.12-1
Distribution: unstable
Urgency: medium
Maintainer: Debian Javascript Maintainers <pkg-javascript-devel@lists.alioth.debian.org>
Changed-By: Xavier Guimard <yadd@debian.org>
Closes: 1146473
Changes:
 node-xmldom (0.9.12-1) unstable; urgency=medium
 .
   * Team upload
   * New upstream version (Closes: #1146473, CVE-2026-83608, CVE-2026-83609,
     CVE-2026-83610, CVE-2026-83611, CVE-2026-83612, CVE-2026-83613,
     CVE-2026-83614, CVE-2026-83615, CVE-2026-83616, CVE-2026-83617,
     CVE-2026-83618)
   * Unfuzz patches
Checksums-Sha1:
 235df811fa853170eef39b7c41503adff1baf8ec 2029 node-xmldom_0.9.12-1.dsc
 13f0cf5d25ddf5d172ecd5195acecc658792c257 671902 node-xmldom_0.9.12.orig.tar.gz
 29ee5275c02bc811343b850a0e750cecc7ec87d1 4748 node-xmldom_0.9.12-1.debian.tar.xz
Checksums-Sha256:
 bc3efeb533e2ecc7866d7a44059cf454efe05f7c3b4378c5d8e7b873ba256aea 2029 node-xmldom_0.9.12-1.dsc
 9cac122779a9a82e6fec6daef71ea1760cddee17b7c6676b7b35d216ed789cd7 671902 node-xmldom_0.9.12.orig.tar.gz
 801a98ec31ae5276a6a97294483f4d875c713573d5e38029493a8f210971468b 4748 node-xmldom_0.9.12-1.debian.tar.xz
Files:
 943ab0f063f167501219056a19162e88 2029 javascript optional node-xmldom_0.9.12-1.dsc
 c803cbe09fae36b2b36aaf77dcd93d26 671902 javascript optional node-xmldom_0.9.12.orig.tar.gz
 baf67313a660a659f323042e94288a57 4748 javascript optional node-xmldom_0.9.12-1.debian.tar.xz
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEAN/li4tVV3nRAF7J9tdMp8mZ7ukFAmqX9DYACgkQ9tdMp8mZ
7ukxKg/+Olru55A4bEHhxihJzQyz8TXyhG1Z/82H6jJOSJO6QIgnmEvCtgBuAvMs
m5nB8gA+fgenaHIRfIyte0YPtt+uuTf91Tf4WuvUeeaaaC2IpY1wVWuraQcltGSX
m036AunOW+3IwQmEhRjZwP3hm4qM+J33dDuMx/x/y7MXnTbEcDtJdXssIITa//a7
0AEMkX2x13Ia2E2AQTV2IUsFmT1QWF+RZ8gngqWX/YYSRLxH9WZsYKSg3uKfSk/K
RlXnkKvPieJg8RIQ5KjjWxExYrpHlcMq+oj1m4DVT9C+uofVYKe/uiwQNFq8BhEz
jCKLNfel0Rjf0tK/RsWtNhb/9viU1tsKPuJ/U7f+IIYNxdHu7fbC3SGl1KRnWSlo
nFE8wiZIpt0gzcuU58RpTACuJndomVwSqoZDtyJu2nt8gdqSqXqv5kWmbGRQFmDP
DRR3uafm8bbYmrbVK85p35wNVMBCUdVTIrnsTT/MofTs144P0ZPdvoAiU9IVP4WK
BJlNHLTOx+tQvUlHCsRfT/4KPt4zUBvaur4McDwMf4ihYEdZDYmG19LXyXHU+gaJ
E2WZElpYgNuJTCU1SGGclAC0bFUF5tgQ08Wc3OGOcUBJTrnSYjUA6EjU+qneGVzo
lRAx/yAUL0gClhKIJ2NgY6ZpIXfxWFyjM6O+bWAHGERn5Zzda5E=
=T5WD
-----END PGP SIGNATURE-----