CVE Catalog

CVE-2026-39315

MediumCVSS 6.1
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.29%

21th percentile - higher than 21% of all known CVEs

Summary

Unhead prior to version 2.1.13 contains a vulnerability in the hasDangerousProtocol() function in packages/unhead/src/plugins/safe.ts, which decodes HTML entities before checking for blocked URI schemes (javascript:, data:, vbscript:). The decoder uses regular expressions with fixed-width digit caps, and when a padded entity exceeds the limit, it is silently skipped, allowing bypass of the filter and injection of malicious URIs.

Risk Assessment

Potential XSS attack by injecting a malicious URI into the <head> section of the document, which could lead to data theft or session hijacking.

Recommendation

Update Unhead to version 2.1.13, which fixes this vulnerability.

Related vulnerabilities

Original NVD description (English source)

Unhead is a document head and template manager. Prior to 2.1.13, useHeadSafe() is the composable that Nuxt's own documentation explicitly recommends for rendering user-supplied content in <head> safely. Internally, the hasDangerousProtocol() function in packages/unhead/src/plugins/safe.ts decodes HTML entities before checking for blocked URI schemes (javascript:, data:, vbscript:). The decoder uses two regular expressions with fixed-width digit caps. The HTML5 specification imposes no limit on leading zeros in numeric character references. When a padded entity exceeds the regex digit cap, the decoder silently skips it. The undecoded string is then passed to startsWith('javascript:'), which does not match. makeTagSafe() writes the raw value directly into SSR HTML output. The browser's HTML parser decodes the padded entity natively and constructs the blocked URI. This vulnerability is fixed in 2.1.13.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS