Lookup for vulnerable packages by Package URL.

Purlpkg:npm/%40xmldom/xmldom@0.9.2
Typenpm
Namespace@xmldom
Namexmldom
Version0.9.2
Qualifiers
Subpath
Is_vulnerabletrue
Next_non_vulnerable_version0.9.10
Latest_non_vulnerable_version0.9.10
Affected_by_vulnerabilities
0
url VCID-19n2-kj76-n3ab
vulnerability_id VCID-19n2-kj76-n3ab
summary
xmldom: Uncontrolled recursion in XML serialization leads to DoS
## Summary

Seven recursive traversals in `lib/dom.js` operate without a depth limit. A sufficiently deeply
nested DOM tree causes a `RangeError: Maximum call stack size exceeded`, crashing the application.

**Reported operations:**
- `Node.prototype.normalize()` — reported by @praveen-kv (email 2026-04-05) and @KarimTantawey (GHSA-fwmp-8wwc-qhv6, via `DOMParser.parseFromString()`)
- `XMLSerializer.serializeToString()` — reported by @Jvr2022 (GHSA-2v35-w6hq-6mfw) and @KarimTantawey (GHSA-j2hf-fqwf-rrjf)

**Additionally, discovered in research:**
- `Element.getElementsByTagName()` / `getElementsByTagNameNS()` / `getElementsByClassName()` / `getElementById()`
- `Node.cloneNode(true)`
- `Document.importNode(node, true)`
- `node.textContent` (getter)
- `Node.isEqualNode(other)`

All seven share the same root cause: pure-JavaScript recursive tree traversal with no depth guard.
A single deeply nested document (parsed successfully) triggers any or all of these operations.

---

## Details

### Root cause

`lib/dom.js` implements DOM tree traversals as depth-first recursive functions. Each level of
element nesting adds one JavaScript call frame. The JS engine's call stack is finite; once
exhausted, a `RangeError: Maximum call stack size exceeded` is thrown. This error may not be
caught reliably at stack-exhaustion depths because the catch handler itself requires stack
frames to execute — especially in async scenarios, where an uncaught `RangeError` inside a
callback or promise chain can crash the entire Node.js process.

Parsing a deeply nested document **succeeds** — the SAX parser in `lib/sax.js` is iterative.
The crash occurs during subsequent operations on the parsed DOM.

### `Node.prototype.normalize()` — reported by @praveen-kv

[`lib/dom.js:1296–1308`](https://github.com/xmldom/xmldom/blob/9ef2fd297ca527a05ecb11979850317a927cd20c/lib/dom.js#L1296-L1308) (main):

```js
normalize: function () {
    var child = this.firstChild;
    while (child) {
        var next = child.nextSibling;
        if (next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE) {
            this.removeChild(next);
            child.appendData(next.data);
        } else {
            child.normalize();   // recursive call — no depth guard
            child = next;
        }
    }
},
```

Crash threshold (Node.js 18, default stack): ~10,000 levels.

### `XMLSerializer.serializeToString()` — reported by @Jvr2022

[`lib/dom.js:2790–2974`](https://github.com/xmldom/xmldom/blob/9ef2fd297ca527a05ecb11979850317a927cd20c/lib/dom.js#L2790-L2974) (main):
The internal `serializeToString` worker recurses into child nodes at four call sites, each
passing a `visibleNamespaces.slice()` copy. The per-frame allocation causes earlier stack
exhaustion than `normalize()`.

Crash threshold (Node.js 18, default stack): ~5,000 levels.

### Additional recursive entry points

All five crash at ~10,000 levels on Node.js 18.

| Function                    | Definition                                                                                                           | Public API entry point(s)                                                                            | Crash depth (Node.js 18) |
|-----------------------------|----------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|--------------------------|
| `_visitNode`                | [`lib/dom.js:1529`](https://github.com/xmldom/xmldom/blob/9ef2fd297ca527a05ecb11979850317a927cd20c/lib/dom.js#L1529) | `getElementsByTagName()`, `getElementsByTagNameNS()`, `getElementsByClassName()`, `getElementById()` | ~10,000 levels           |
| `cloneNode` (module fn)     | [`lib/dom.js:3037`](https://github.com/xmldom/xmldom/blob/9ef2fd297ca527a05ecb11979850317a927cd20c/lib/dom.js#L3037) | `Node.prototype.cloneNode(true)`                                                                     | ~10,000 levels           |
| `importNode` (module fn)    | [`lib/dom.js:2975`](https://github.com/xmldom/xmldom/blob/9ef2fd297ca527a05ecb11979850317a927cd20c/lib/dom.js#L2975) | `Document.prototype.importNode(node, true)`                                                          | ~10,000 levels           |
| `getTextContent` (inner fn) | [`lib/dom.js:3130`](https://github.com/xmldom/xmldom/blob/9ef2fd297ca527a05ecb11979850317a927cd20c/lib/dom.js#L3130) | `node.textContent` (getter)                                                                          | ~10,000 levels           |
| `isEqualNode`               | [`lib/dom.js:1120`](https://github.com/xmldom/xmldom/blob/9ef2fd297ca527a05ecb11979850317a927cd20c/lib/dom.js#L1120) | `Node.prototype.isEqualNode(other)`                                                                  | ~10,000 levels           |

Both active branches (`main` and `release-0.8.x`) are identically affected. The unscoped `xmldom`
package (≤ 0.6.0) carries the same recursive patterns from its initial commit.

### Browser behavior

Tested with Chromium 147 (Playwright headless). Chromium's native C++ implementations of all
seven DOM methods are **iterative** — they traverse the DOM without consuming JS call stack frames.
All seven succeed at depths up to 20,000 without any crash.

When `@xmldom/xmldom` is bundled and run in a browser context the same recursive JS code executes
under the browser's V8 stack limit (~12,000–13,000 frames). The crash thresholds are similar to
those observed on Node.js 18 (~5,000 for `serializeToString`, ~10,000 for the remaining six).

The vulnerability is specific to xmldom's pure-JavaScript recursive implementation, not an
inherent property of the DOM operations.

---

## PoC

### `normalize()` (from @praveen-kv report, 2026-04-05)

```js
const { DOMParser } = require('@xmldom/xmldom');

function generateNestedXML(depth) {
    return '<root>' + '<a>'.repeat(depth) + 'text' + '</a>'.repeat(depth) + '</root>';
}

const doc = new DOMParser().parseFromString(generateNestedXML(10000), 'text/xml');
doc.documentElement.normalize();
// RangeError: Maximum call stack size exceeded
```

### `XMLSerializer.serializeToString()` (from GHSA-2v35-w6hq-6mfw)

```js
const { DOMParser, XMLSerializer } = require('@xmldom/xmldom');

const depth = 5000;
const xml = '<a>'.repeat(depth) + '</a>'.repeat(depth);
const doc = new DOMParser().parseFromString(xml, 'text/xml');
new XMLSerializer().serializeToString(doc);
// RangeError: Maximum call stack size exceeded
```

The other methods have been verified using similar pocs.

---

## Impact

Any service that accepts attacker-controlled XML and subsequently calls any of the seven affected
DOM operations can be forced into a reliable denial of service with a single crafted payload.

The immediate result is an uncaught `RangeError` and failed request processing. In deployments
where uncaught exceptions terminate the worker or process, the impact can extend beyond a single
request and disrupt service availability more broadly.

No authentication, special options, or invalid XML is required. A valid, deeply nested XML
document is enough.

---

## Disclosure

The `normalize()` vector was publicly disclosed at 2026-04-06T11:25:07Z via
[xmldom/xmldom#987](https://github.com/xmldom/xmldom/pull/987) (closed without merge).
`serializeToString()` and the five additional recursive entry points were not mentioned in that PR.

---

## Fix Applied

All seven affected traversals have been converted from recursive to iterative implementations, eliminating call-stack consumption on deep trees.

### `walkDOM` utility

A new `walkDOM(node, context, callbacks)` utility is introduced. It traverses the subtree rooted at `node` in depth-first order using an explicit JavaScript array as a stack, consuming heap memory instead of call-stack frames. `context` is an arbitrary value threaded through the walk — each `callbacks.enter(node, context)` call returns the context to pass to that node's children, enabling per-branch state (e.g. namespace snapshots in the serializer). `callbacks.exit(node, context)` (optional) is called in post-order after all children have been visited.

The following six operations are re-implemented on top of `walkDOM`:

| Operation | Public entry point(s) |
|---|---|
| `_visitNode` helper | `getElementsByTagName()`, `getElementsByTagNameNS()`, `getElementsByClassName()`, `getElementById()` |
| `getTextContent` inner function | `node.textContent` getter |
| `cloneNode` module function | `Node.prototype.cloneNode(true)` |
| `importNode` module function | `Document.prototype.importNode(node, true)` |
| `serializeToString` worker | `XMLSerializer.prototype.serializeToString()`, `Node.prototype.toString()`, `NodeList.prototype.toString()` |
| `normalize` | `Node.prototype.normalize()` |

`normalize` uses `walkDOM` with a `null` context and an `enter` callback that merges adjacent Text children of the current node before `walkDOM` reads and queues those children — so the surviving post-merge children are what the walker descends into.

### Custom iterative loop for `isEqualNode`

One function cannot use `walkDOM`:

**`Node.prototype.isEqualNode(other)`** (0.9.x only; absent from 0.8.x) compares two trees in parallel. It maintains an explicit stack of `{node, other}` node pairs — one node from each tree — which cannot be expressed with `walkDOM`'s single-tree visitor.

### After the fix

All seven entry points succeed on trees of arbitrary depth without throwing `RangeError`. The original PoCs still demonstrate the vulnerability on unpatched versions and confirm the fix on patched versions.
references
0
reference_url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-41673.json
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-41673.json
1
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-41673
reference_id
reference_type
scores
0
value 0.0004
scoring_system epss
scoring_elements 0.12265
published_at 2026-06-07T12:55:00Z
1
value 0.0004
scoring_system epss
scoring_elements 0.12302
published_at 2026-06-05T12:55:00Z
2
value 0.0004
scoring_system epss
scoring_elements 0.12301
published_at 2026-06-06T12:55:00Z
3
value 0.00043
scoring_system epss
scoring_elements 0.13506
published_at 2026-06-08T12:55:00Z
4
value 0.00043
scoring_system epss
scoring_elements 0.13537
published_at 2026-06-09T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-41673
2
reference_url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-41673
reference_id
reference_type
scores
url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-41673
3
reference_url https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
url https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml
4
reference_url https://github.com/xmldom/xmldom
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/xmldom/xmldom
5
reference_url https://github.com/xmldom/xmldom/commit/17678a2a73ecbd1a2da90f3d47dc23da9cef81aa
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/commit/17678a2a73ecbd1a2da90f3d47dc23da9cef81aa
6
reference_url https://github.com/xmldom/xmldom/commit/291257493cb0eb6980eda83b162a9c4e6d7d2597
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/commit/291257493cb0eb6980eda83b162a9c4e6d7d2597
7
reference_url https://github.com/xmldom/xmldom/commit/2d6d6916ed8a4c223db1f6d7560ab4544c465b0f
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/commit/2d6d6916ed8a4c223db1f6d7560ab4544c465b0f
8
reference_url https://github.com/xmldom/xmldom/commit/430357c7b6333108856e917bf2367afe5ceb6f8a
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/commit/430357c7b6333108856e917bf2367afe5ceb6f8a
9
reference_url https://github.com/xmldom/xmldom/commit/4845ef109221df0890825de2822fbe77afba3afe
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/commit/4845ef109221df0890825de2822fbe77afba3afe
10
reference_url https://github.com/xmldom/xmldom/commit/8834218c85ac2a4d757b9587c9028e67c2f7b6c3
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/commit/8834218c85ac2a4d757b9587c9028e67c2f7b6c3
11
reference_url https://github.com/xmldom/xmldom/commit/8b7cfd1491314abdc347261921d7334ff15f7112
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/commit/8b7cfd1491314abdc347261921d7334ff15f7112
12
reference_url https://github.com/xmldom/xmldom/commit/b0620383abc1df067f3ce1014c43ae1bc1161eeb
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/commit/b0620383abc1df067f3ce1014c43ae1bc1161eeb
13
reference_url https://github.com/xmldom/xmldom/commit/e6edcab6bef5bcdba0b220bb35442aa72f452b84
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/commit/e6edcab6bef5bcdba0b220bb35442aa72f452b84
14
reference_url https://github.com/xmldom/xmldom/releases/tag/0.8.13
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/releases/tag/0.8.13
15
reference_url https://github.com/xmldom/xmldom/releases/tag/0.9.10
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/releases/tag/0.9.10
16
reference_url https://github.com/xmldom/xmldom/security/advisories/GHSA-2v35-w6hq-6mfw
reference_id
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
1
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:08:40Z/
url https://github.com/xmldom/xmldom/security/advisories/GHSA-2v35-w6hq-6mfw
17
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-41673
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-41673
18
reference_url https://bugzilla.redhat.com/show_bug.cgi?id=2467630
reference_id 2467630
reference_type
scores
url https://bugzilla.redhat.com/show_bug.cgi?id=2467630
19
reference_url https://github.com/advisories/GHSA-2v35-w6hq-6mfw
reference_id GHSA-2v35-w6hq-6mfw
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-2v35-w6hq-6mfw
fixed_packages
0
url pkg:npm/%40xmldom/xmldom@0.9.10
purl pkg:npm/%40xmldom/xmldom@0.9.10
is_vulnerable false
affected_by_vulnerabilities
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/%2540xmldom/xmldom@0.9.10
aliases CVE-2026-41673, GHSA-2v35-w6hq-6mfw
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-19n2-kj76-n3ab
1
url VCID-6dvr-8jtx-v3as
vulnerability_id VCID-6dvr-8jtx-v3as
summary
xmldom has XML node injection through unvalidated comment serialization
## Summary

The package allows attacker-controlled comment content to be serialized into XML without validating or neutralizing comment breaking sequences. As a result, an attacker can terminate the comment early and inject arbitrary XML nodes into the serialized output.

---

## Details

The issue is in the DOM construction and serialization flow for comment nodes.

When `createComment(data)` is called, the supplied string is stored as comment data through the generic character-data handling path. That content is kept as-is. Later, when the document is serialized, the serializer writes comment nodes by concatenating the XML comment delimiters with the stored `node.data` value directly.

That behavior is unsafe because XML comments are a syntax-sensitive context. If attacker-controlled input contains a sequence that closes the comment, the serializer does not preserve it as literal comment text. Instead, it emits output where the remainder of the payload is treated as live XML markup.

This is a real injection bug, not a formatting issue. The serializer already applies context-aware handling in other places, such as escaping text nodes and rewriting unsafe CDATA terminators. Comment content does not receive equivalent treatment. Because of that gap, untrusted data can break out of the comment boundary and modify the structure of the final XML document.

---

## PoC

```js
const { DOMImplementation, DOMParser, XMLSerializer } = require('@xmldom/xmldom');

const doc = new DOMImplementation().createDocument(null, 'root', null);

doc.documentElement.appendChild(
  doc.createComment('--><injected attr="1"/><!--')
);

const xml = new XMLSerializer().serializeToString(doc);
console.log(xml);
// <root><!----><injected attr="1"/><!----></root>

const reparsed = new DOMParser().parseFromString(xml, 'text/xml');
console.log(reparsed.documentElement.childNodes.item(1).nodeName);
// injected
```

---

## Impact

An application that uses the package to build XML from untrusted input can be made to emit attacker-controlled elements outside the intended comment boundary. That allows the attacker to alter the meaning and structure of generated XML documents.

In practice, this can affect any workflow that generates XML and then stores it, forwards it, signs it, or hands it to another parser. Realistic targets include XML-based configuration, policy documents, and message formats where downstream consumers trust the serialized structure.

---

## Disclosure

This vulnerability was publicly disclosed at 2026-04-06T11:25:07Z via [xmldom/xmldom#987](https://github.com/xmldom/xmldom/pull/987), which was subsequently closed without being merged.

---

## Fix Applied

> **⚠ Opt-in required.** Protection is not automatic. Existing serialization calls remain
> vulnerable unless `{ requireWellFormed: true }` is explicitly passed. Applications that pass
> untrusted data to `createComment()` or mutate comment nodes with untrusted input (via
> `appendData`, `insertData`, `replaceData`, `.data =`, or `.textContent =`) should audit all
> `serializeToString()` call sites and add the option.

`XMLSerializer.serializeToString()` now accepts an options object as a second argument. When `{ requireWellFormed: true }` is passed, the serializer throws `InvalidStateError` before emitting a Comment node whose `.data` would produce malformed XML.

On `@xmldom/xmldom` ≥ 0.9.10, the full W3C DOM Parsing §3.2.1.4 check is applied: throws if `.data` contains `--` anywhere, ends with `-`, or contains characters outside the XML Char production.

On `@xmldom/xmldom` ≥ 0.8.13 (LTS), only the `-->` injection sequence is checked. The `0.8.x` SAX parser accepts comments containing `--` (without `>`), so throwing on bare `--` would break a previously-working round-trip on that branch. The `-->` check is sufficient to prevent injection.

### PoC — fixed path

```js
const { DOMImplementation, XMLSerializer } = require('@xmldom/xmldom');

const doc = new DOMImplementation().createDocument(null, 'root', null);
doc.documentElement.appendChild(doc.createComment('--><injected attr="1"/><!--'));

// Default (unchanged): verbatim — injection present
const unsafe = new XMLSerializer().serializeToString(doc);
console.log(unsafe);
// <root><!----><injected attr="1"/><!----></root>

// Opt-in guard: throws InvalidStateError before serializing
try {
  new XMLSerializer().serializeToString(doc, { requireWellFormed: true });
} catch (e) {
  console.log(e.name, e.message);
  // InvalidStateError: The comment node data contains "--" or ends with "-"  (0.9.x)
  // InvalidStateError: The comment node data contains "-->"  (0.8.x — only --> is checked)
}
```

### Why the default stays verbatim

The W3C DOM Parsing and Serialization spec §3.2.1.4 defines a `require well-formed` flag whose **default value is `false`**. With the flag unset, the spec explicitly permits serializing ill-formed comment content verbatim — this is also the behavior of browser implementations (Chrome, Firefox, Safari): `new XMLSerializer().serializeToString(doc)` produces the injection sequence without error in all major browsers.

Unconditionally throwing would be a behavioral breaking change with no spec justification. The opt-in `requireWellFormed: true` flag allows applications that require injection safety to enable strict mode without breaking existing deployments.

### Residual limitation

The fix operates at serialization time only. There is no creation-time check in `createComment` — the spec does not require one for comment data. Any path that leads to a Comment node with `--` in its data (`createComment`, `appendData`, `.data =`, etc.) produces a node that serializes safely only when `{ requireWellFormed: true }` is passed to `serializeToString`.
references
0
reference_url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-41672.json
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-41672.json
1
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-41672
reference_id
reference_type
scores
0
value 0.00074
scoring_system epss
scoring_elements 0.22561
published_at 2026-06-06T12:55:00Z
1
value 0.00074
scoring_system epss
scoring_elements 0.22511
published_at 2026-06-07T12:55:00Z
2
value 0.00074
scoring_system epss
scoring_elements 0.22574
published_at 2026-06-05T12:55:00Z
3
value 0.00081
scoring_system epss
scoring_elements 0.2378
published_at 2026-06-08T12:55:00Z
4
value 0.00081
scoring_system epss
scoring_elements 0.23785
published_at 2026-06-09T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-41672
2
reference_url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-41672
reference_id
reference_type
scores
url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-41672
3
reference_url https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
url https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml
4
reference_url https://github.com/xmldom/xmldom
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/xmldom/xmldom
5
reference_url https://github.com/xmldom/xmldom/commit/b397540889086da868c30c366ad5c220d1a750c7
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:11:04Z/
url https://github.com/xmldom/xmldom/commit/b397540889086da868c30c366ad5c220d1a750c7
6
reference_url https://github.com/xmldom/xmldom/commit/fda7cc313de30243fea35cada64e0bb12099c2a1
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:11:04Z/
url https://github.com/xmldom/xmldom/commit/fda7cc313de30243fea35cada64e0bb12099c2a1
7
reference_url https://github.com/xmldom/xmldom/pull/987
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:11:04Z/
url https://github.com/xmldom/xmldom/pull/987
8
reference_url https://github.com/xmldom/xmldom/releases/tag/0.8.13
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:11:04Z/
url https://github.com/xmldom/xmldom/releases/tag/0.8.13
9
reference_url https://github.com/xmldom/xmldom/releases/tag/0.9.10
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:11:04Z/
url https://github.com/xmldom/xmldom/releases/tag/0.9.10
10
reference_url https://github.com/xmldom/xmldom/security/advisories/GHSA-j759-j44w-7fr8
reference_id
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
1
value 8.7
scoring_system cvssv4
scoring_elements 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
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T14:11:04Z/
url https://github.com/xmldom/xmldom/security/advisories/GHSA-j759-j44w-7fr8
11
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-41672
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-41672
12
reference_url https://bugzilla.redhat.com/show_bug.cgi?id=2467631
reference_id 2467631
reference_type
scores
url https://bugzilla.redhat.com/show_bug.cgi?id=2467631
13
reference_url https://github.com/advisories/GHSA-j759-j44w-7fr8
reference_id GHSA-j759-j44w-7fr8
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-j759-j44w-7fr8
fixed_packages
0
url pkg:npm/%40xmldom/xmldom@0.9.10
purl pkg:npm/%40xmldom/xmldom@0.9.10
is_vulnerable false
affected_by_vulnerabilities
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/%2540xmldom/xmldom@0.9.10
aliases CVE-2026-41672, GHSA-j759-j44w-7fr8
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-6dvr-8jtx-v3as
2
url VCID-6nk6-kb5u-c7ed
vulnerability_id VCID-6nk6-kb5u-c7ed
summary
xmldom has XML node injection through unvalidated processing instruction serialization
## Summary

The package allows attacker-controlled processing instruction data to be serialized into XML without validating or neutralizing the PI-closing sequence `?>`. As a result, an attacker can terminate the processing instruction early and inject arbitrary XML nodes into the serialized output.

---

## Details

The issue is in the DOM construction and serialization flow for processing instruction nodes.

When `createProcessingInstruction(target, data)` is called, the supplied `data` string is stored directly on the node without validation. Later, when the document is serialized, the serializer writes PI nodes by concatenating `<?`, the target, a space, `node.data`, and `?>` directly.

That behavior is unsafe because processing instructions are a syntax-sensitive context. The closing delimiter `?>` terminates the PI. If attacker-controlled input contains `?>`, the serializer does not preserve it as literal PI content. Instead, it emits output where the remainder of the payload is treated as live XML markup.

The same class of vulnerability was previously addressed for CDATA sections (GHSA-wh4c-j3r5-mjhp / CVE-2026-34601), where `]]>` in CDATA data was handled by splitting. The serializer applies no equivalent protection to processing instruction data.

---

## Affected code

**`lib/dom.js` — `createProcessingInstruction` (lines 2240–2246):**

```js
createProcessingInstruction: function (target, data) {
    var node = new ProcessingInstruction(PDC);
    node.ownerDocument = this;
    node.childNodes = new NodeList();
    node.nodeName = node.target = target;
    node.nodeValue = node.data = data;
    return node;
},
```

No validation is performed on `data`. Any string including `?>` is stored as-is.

**`lib/dom.js` — serializer PI case (line 2966):**

```js
case PROCESSING_INSTRUCTION_NODE:
    return buf.push('<?', node.target, ' ', node.data, '?>');
```

`node.data` is emitted verbatim. If it contains `?>`, that sequence terminates the PI in the output
stream and the remainder appears as active XML markup.

**Contrast — CDATA (line 2945, patched):**

```js
case CDATA_SECTION_NODE:
    return buf.push(g.CDATA_START, node.data.replace(/]]>/g, ']]]]><![CDATA[>'), g.CDATA_END);
```

---

## PoC

### Minimal (from @tlsbollei report, 2026-04-01)

```js
const { DOMImplementation, XMLSerializer } = require('@xmldom/xmldom');

const doc = new DOMImplementation().createDocument(null, 'r', null);
doc.documentElement.appendChild(
    doc.createProcessingInstruction('a', '?><z/><?q ')
);
console.log(new XMLSerializer().serializeToString(doc));
// <r><?a ?><z/><?q ?></r>
//          ^^^^ injected <z/> element is active markup
```

### With re-parse verification (from @tlsbollei report)

```js
const assert = require('assert');
const { DOMParser, XMLSerializer } = require('@xmldom/xmldom');

const doc = new DOMParser().parseFromString('<r/>', 'application/xml');
doc.documentElement.appendChild(doc.createProcessingInstruction('a', '?><z/><?q '));
const xml = new XMLSerializer().serializeToString(doc);
assert.strictEqual(new DOMParser().parseFromString(xml, 'application/xml')
    .getElementsByTagName('z').length, 1); // passes — z is a real element
```

---

## Impact

An application that uses the package to build XML from untrusted input can be made to emit attacker-controlled elements outside the intended PI boundary. That allows the attacker to alter the meaning and structure of generated XML documents.

In practice, this can affect any workflow that generates XML and then stores it, forwards it, signs it, or hands it to another parser. Realistic targets include XML-based configuration, policy documents, and message formats where downstream consumers trust the serialized structure.

As noted by @tlsbollei: this is the same delimiter-driven XML injection bug class previously addressed by GHSA-wh4c-j3r5-mjhp for `createCDATASection()`. Fixing CDATA while leaving PI creation and PI serialization unguarded leaves the same standards-constrained issue open for another node type.

---

## Disclosure

This vulnerability was publicly disclosed at 2026-04-06T11:25:07Z via
[xmldom/xmldom#987](https://github.com/xmldom/xmldom/pull/987), which was subsequently closed
without being merged.

---

## Fix Applied

> **⚠ Opt-in required.** Protection is not automatic. Existing serialization calls remain
> vulnerable unless `{ requireWellFormed: true }` is explicitly passed. Applications that pass
> untrusted data to `createProcessingInstruction()` or mutate PI nodes with untrusted input
> (via `.data =` or `CharacterData` mutation methods) should audit all `serializeToString()`
> call sites and add the option.

`XMLSerializer.serializeToString()` now accepts an options object as a second argument. When `{ requireWellFormed: true }` is passed, the serializer throws `InvalidStateError` before emitting any ProcessingInstruction node whose `.data` contains `?>`. This check applies regardless of how `?>` entered the node — whether via `createProcessingInstruction` directly or a subsequent mutation (`.data =`, `CharacterData` methods).

On `@xmldom/xmldom` ≥ 0.9.10, the serializer additionally applies the full W3C DOM Parsing §3.2.1.7 checks when `requireWellFormed: true`:

1. **Target check**: throws `InvalidStateError` if the PI target contains a `:` character or is an ASCII case-insensitive match for `"xml"`.
2. **Data Char check**: throws `InvalidStateError` if the PI data contains characters outside the XML Char production.
3. **Data sequence check**: throws `InvalidStateError` if the PI data contains `?>`.

On `@xmldom/xmldom` ≥ 0.8.13 (LTS), only the `?>` data check (check 3) is applied. The target and XML Char checks are not included in the LTS fix.

### PoC — fixed path

```js
const { DOMImplementation, XMLSerializer } = require('@xmldom/xmldom');

const doc = new DOMImplementation().createDocument(null, 'r', null);
doc.documentElement.appendChild(doc.createProcessingInstruction('a', '?><z/><?q '));

// Default (unchanged): verbatim — injection present
const unsafe = new XMLSerializer().serializeToString(doc);
console.log(unsafe);
// <r><?a ?><z/><?q ?></r>

// Opt-in guard: throws InvalidStateError before serializing
try {
  new XMLSerializer().serializeToString(doc, { requireWellFormed: true });
} catch (e) {
  console.log(e.name, e.message);
  // InvalidStateError: The ProcessingInstruction data contains "?>"
}
```

The guard catches `?>` regardless of when it was introduced:

```js
// Post-creation mutation: also caught at serialization time
const pi = doc.createProcessingInstruction('target', 'safe data');
doc.documentElement.appendChild(pi);
pi.data = 'safe?><injected/>';
new XMLSerializer().serializeToString(doc, { requireWellFormed: true });
// InvalidStateError: The ProcessingInstruction data contains "?>"
```

### Why the default stays verbatim

The W3C DOM Parsing and Serialization spec §3.2.1.3 defines a `require well-formed` flag whose **default value is `false`**. With the flag unset, the spec explicitly permits serializing PI data verbatim. This matches browser behavior: Chrome, Firefox, and Safari all emit `?>` in PI data verbatim by default without error.

Unconditionally throwing would be a behavioral breaking change with no spec justification. The opt-in `requireWellFormed: true` flag allows applications that require injection safety to enable strict mode without breaking existing code.

### Residual limitation

`createProcessingInstruction(target, data)` does not validate `data` at creation time. The WHATWG DOM spec (§4.5 step 2) mandates an `InvalidCharacterError` when `data` contains `?>`; enforcing this check unconditionally at creation time is a breaking change and is deferred to a future breaking release.

When the default serialization path is used (without `requireWellFormed: true`), PI data containing `?>` is still emitted verbatim. Applications that do not pass `requireWellFormed: true` remain exposed.
references
0
reference_url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-41675.json
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-41675.json
1
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-41675
reference_id
reference_type
scores
0
value 0.0002
scoring_system epss
scoring_elements 0.05735
published_at 2026-06-05T12:55:00Z
1
value 0.0002
scoring_system epss
scoring_elements 0.05723
published_at 2026-06-07T12:55:00Z
2
value 0.0002
scoring_system epss
scoring_elements 0.05721
published_at 2026-06-06T12:55:00Z
3
value 0.00022
scoring_system epss
scoring_elements 0.06333
published_at 2026-06-09T12:55:00Z
4
value 0.00022
scoring_system epss
scoring_elements 0.06326
published_at 2026-06-08T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-41675
2
reference_url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-41675
reference_id
reference_type
scores
url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-41675
3
reference_url https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
url https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml
4
reference_url https://github.com/xmldom/xmldom
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/xmldom/xmldom
5
reference_url https://github.com/xmldom/xmldom/commit/7207a4b0e0bcc228868075ed991665ef9f73b1c2
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T13:43:50Z/
url https://github.com/xmldom/xmldom/commit/7207a4b0e0bcc228868075ed991665ef9f73b1c2
6
reference_url https://github.com/xmldom/xmldom/releases/tag/0.8.13
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T13:43:50Z/
url https://github.com/xmldom/xmldom/releases/tag/0.8.13
7
reference_url https://github.com/xmldom/xmldom/releases/tag/0.9.10
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T13:43:50Z/
url https://github.com/xmldom/xmldom/releases/tag/0.9.10
8
reference_url https://github.com/xmldom/xmldom/security/advisories/GHSA-x6wf-f3px-wcqx
reference_id
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
1
value 8.7
scoring_system cvssv4
scoring_elements 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
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T13:43:50Z/
url https://github.com/xmldom/xmldom/security/advisories/GHSA-x6wf-f3px-wcqx
9
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-41675
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-41675
10
reference_url https://bugzilla.redhat.com/show_bug.cgi?id=2467629
reference_id 2467629
reference_type
scores
url https://bugzilla.redhat.com/show_bug.cgi?id=2467629
11
reference_url https://github.com/advisories/GHSA-x6wf-f3px-wcqx
reference_id GHSA-x6wf-f3px-wcqx
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-x6wf-f3px-wcqx
fixed_packages
0
url pkg:npm/%40xmldom/xmldom@0.9.10
purl pkg:npm/%40xmldom/xmldom@0.9.10
is_vulnerable false
affected_by_vulnerabilities
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/%2540xmldom/xmldom@0.9.10
aliases CVE-2026-41675, GHSA-x6wf-f3px-wcqx
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-6nk6-kb5u-c7ed
3
url VCID-gtt8-tv1t-17aq
vulnerability_id VCID-gtt8-tv1t-17aq
summary xmldom: xmldom: XML structure injection via CDATA terminator
references
0
reference_url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-34601.json
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-34601.json
1
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-34601
reference_id
reference_type
scores
0
value 0.00019
scoring_system epss
scoring_elements 0.05313
published_at 2026-06-05T12:55:00Z
1
value 0.00019
scoring_system epss
scoring_elements 0.05251
published_at 2026-06-08T12:55:00Z
2
value 0.00019
scoring_system epss
scoring_elements 0.05291
published_at 2026-06-07T12:55:00Z
3
value 0.00019
scoring_system epss
scoring_elements 0.05297
published_at 2026-06-06T12:55:00Z
4
value 0.0002
scoring_system epss
scoring_elements 0.05625
published_at 2026-06-09T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-34601
2
reference_url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-34601
reference_id
reference_type
scores
url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-34601
3
reference_url https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
url https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml
4
reference_url https://github.com/xmldom/xmldom
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/xmldom/xmldom
5
reference_url https://github.com/xmldom/xmldom/commit/2b852e836ab86dbbd6cbaf0537f584dd0b5ac184
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-04-03T16:02:29Z/
url https://github.com/xmldom/xmldom/commit/2b852e836ab86dbbd6cbaf0537f584dd0b5ac184
6
reference_url https://github.com/xmldom/xmldom/releases/tag/0.8.12
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-04-03T16:02:29Z/
url https://github.com/xmldom/xmldom/releases/tag/0.8.12
7
reference_url https://github.com/xmldom/xmldom/releases/tag/0.9.9
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-04-03T16:02:29Z/
url https://github.com/xmldom/xmldom/releases/tag/0.9.9
8
reference_url https://github.com/xmldom/xmldom/security/advisories/GHSA-wh4c-j3r5-mjhp
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
1
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-04-03T16:02:29Z/
url https://github.com/xmldom/xmldom/security/advisories/GHSA-wh4c-j3r5-mjhp
9
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-34601
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-34601
10
reference_url https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1132714
reference_id 1132714
reference_type
scores
url https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1132714
11
reference_url https://bugzilla.redhat.com/show_bug.cgi?id=2454595
reference_id 2454595
reference_type
scores
url https://bugzilla.redhat.com/show_bug.cgi?id=2454595
12
reference_url https://github.com/advisories/GHSA-wh4c-j3r5-mjhp
reference_id GHSA-wh4c-j3r5-mjhp
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-wh4c-j3r5-mjhp
fixed_packages
0
url pkg:npm/%40xmldom/xmldom@0.9.9
purl pkg:npm/%40xmldom/xmldom@0.9.9
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-19n2-kj76-n3ab
1
vulnerability VCID-6dvr-8jtx-v3as
2
vulnerability VCID-6nk6-kb5u-c7ed
3
vulnerability VCID-pjqh-1tm8-g3ee
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/%2540xmldom/xmldom@0.9.9
aliases CVE-2026-34601, GHSA-wh4c-j3r5-mjhp
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-gtt8-tv1t-17aq
4
url VCID-pjqh-1tm8-g3ee
vulnerability_id VCID-pjqh-1tm8-g3ee
summary xmldom: xmldom: Arbitrary XML markup injection
references
0
reference_url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-41674.json
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
url https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2026-41674.json
1
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-41674
reference_id
reference_type
scores
0
value 0.0002
scoring_system epss
scoring_elements 0.05735
published_at 2026-06-05T12:55:00Z
1
value 0.0002
scoring_system epss
scoring_elements 0.05723
published_at 2026-06-07T12:55:00Z
2
value 0.0002
scoring_system epss
scoring_elements 0.05721
published_at 2026-06-06T12:55:00Z
3
value 0.00022
scoring_system epss
scoring_elements 0.06333
published_at 2026-06-09T12:55:00Z
4
value 0.00022
scoring_system epss
scoring_elements 0.06326
published_at 2026-06-08T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-41674
2
reference_url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-41674
reference_id
reference_type
scores
url https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-41674
3
reference_url https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
url https://ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml
4
reference_url https://github.com/xmldom/xmldom
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/xmldom/xmldom
5
reference_url https://github.com/xmldom/xmldom/commit/372008f9ae0e20fd69f761c7b79e202598267314
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T12:35:22Z/
url https://github.com/xmldom/xmldom/commit/372008f9ae0e20fd69f761c7b79e202598267314
6
reference_url https://github.com/xmldom/xmldom/releases/tag/0.8.13
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T12:35:22Z/
url https://github.com/xmldom/xmldom/releases/tag/0.8.13
7
reference_url https://github.com/xmldom/xmldom/releases/tag/0.9.10
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T12:35:22Z/
url https://github.com/xmldom/xmldom/releases/tag/0.9.10
8
reference_url https://github.com/xmldom/xmldom/security/advisories/GHSA-f6ww-3ggp-fr8h
reference_id
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
1
value 8.7
scoring_system cvssv4
scoring_elements 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
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-07T12:35:22Z/
url https://github.com/xmldom/xmldom/security/advisories/GHSA-f6ww-3ggp-fr8h
9
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-41674
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements 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
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-41674
10
reference_url https://bugzilla.redhat.com/show_bug.cgi?id=2467620
reference_id 2467620
reference_type
scores
url https://bugzilla.redhat.com/show_bug.cgi?id=2467620
11
reference_url https://github.com/advisories/GHSA-f6ww-3ggp-fr8h
reference_id GHSA-f6ww-3ggp-fr8h
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-f6ww-3ggp-fr8h
12
reference_url https://access.redhat.com/errata/RHSA-2026:20034
reference_id RHSA-2026:20034
reference_type
scores
url https://access.redhat.com/errata/RHSA-2026:20034
13
reference_url https://access.redhat.com/errata/RHSA-2026:21338
reference_id RHSA-2026:21338
reference_type
scores
url https://access.redhat.com/errata/RHSA-2026:21338
14
reference_url https://access.redhat.com/errata/RHSA-2026:21703
reference_id RHSA-2026:21703
reference_type
scores
url https://access.redhat.com/errata/RHSA-2026:21703
fixed_packages
0
url pkg:npm/%40xmldom/xmldom@0.9.10
purl pkg:npm/%40xmldom/xmldom@0.9.10
is_vulnerable false
affected_by_vulnerabilities
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/%2540xmldom/xmldom@0.9.10
aliases CVE-2026-41674, GHSA-f6ww-3ggp-fr8h
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-pjqh-1tm8-g3ee
Fixing_vulnerabilities
Risk_score4.0
Resource_urlhttp://public2.vulnerablecode.io/packages/pkg:npm/%2540xmldom/xmldom@0.9.2