CVE-2026-31873: Unhead has a Bypass of URI Scheme Sanitization in makeTagSafe via Case-Sensitivity
The link.href check in makeTagSafe (safe.ts, line 68-71) uses String.includes(), which is case-sensitive:
typescript if (key === 'href') { if (val.includes('javascript:') || val.includes('data:')) { return } next[key] = val }
Browsers treat URI schemes case-insensitively. DATA:text/css,... is the same as data:text/css,... to the browser, but 'DATA:...'.includes('data:') returns false.
PoC
javascript useHeadSafe({ link: [{ rel: 'stylesheet', href: 'DATA:text/css,body{display:none}' }] })
SSR output:
html <link rel="stylesheet" href="DATA:text/css,body{display:none}">
The browser loads this as a CSS stylesheet. An attacker can inject arbitrary CSS for UI redressing or data exfiltration via CSS attribute selectors with background-image callbacks.
Any case variation works: DATA:, Data:, dAtA:, JAVASCRIPT:, etc.
Suggested fix
typescript if (key === 'href') { const lower = val.toLowerCase() if (lower.includes('javascript:') || lower.includes('data:')) { return } next[key] = val }
Other sources
Unhead is a document head and template manager. Prior to 2.1.11, The link.href check in makeTagSafe (safe.ts) uses String.includes(), which is case-sensitive. Browsers treat URI schemes case-insensitively. DATA:text/css,... is the same as data:text/css,... to the browser, but 'DATA:...'.includes('data:') returns false. An attacker can inject arbitrary CSS for UI redressing or data exfiltration via CSS attribute selectors with background-image callbacks. This vulnerability is fixed in 2.1.11.
— MITRE
Affected Software
Event History
Frequently Asked Questions
What is the severity of CVE-2026-31873?
CVE-2026-31873 is considered a high severity vulnerability due to its potential for bypassing URI scheme sanitization.
How do I fix CVE-2026-31873?
To fix CVE-2026-31873, upgrade the unhead package to version 2.1.11 or later.
What software is affected by CVE-2026-31873?
CVE-2026-31873 affects unhead versions up to and including 2.1.10.
What is the nature of the vulnerability in CVE-2026-31873?
CVE-2026-31873 is a bypass vulnerability that arises from case-sensitivity in URI scheme sanitization.
Is CVE-2026-31873 a critical security issue?
Yes, CVE-2026-31873 poses a critical security risk as it allows attackers to potentially execute unsafe URI schemes.