Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate and submit crafted head value
-
DeliveryValue passed to useHeadSafe in island
-
ExploitSafe-input marker dropped on serialization
-
ExecutionNuxtIsland injects entry into page head
-
ImpactStored XSS executes in victim browser
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires ALL of: (1) a Nuxt application in the vulnerable range 3.13.0-4.6.1; (2) use of server islands - a .server.vue component/page or a component rendered through NuxtIsland; (3) application code that passes attacker-controlled data into useHeadSafe within that island (the serialized island response loses the _safe marker, so NuxtIsland re-adds the input as an ordinary head entry and the allowlist no longer strips event-handler attributes or executable script). Limiting factors that reduce realistic risk: the vulnerable useHeadSafe-with-untrusted-data pattern is non-default developer code, not an out-of-the-box behavior; the CVSS PR:L indicates the attacker needs some privilege/ability to store the malicious data; and UI:R means a victim must subsequently load the affected island page for the stored payload to fire. |
| Impact | This is a genuine but conditional, medium-severity stored XSS (CWE-79), not a widespread emergency. The vendor CVSS of 5.4 (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N) reflects network reach but low technical impact (C:L/I:L/A:N) and the need for both low privileges (PR:L) and victim interaction (UI:R). No EPSS score, no CISA KEV listing, and no public exploit were supplied, so the only exploitation signal is the fix commit itself - exploitation status is therefore 'no public exploit identified at time of analysis.' The single most important mitigating factor is not captured by the raw score: the flaw only manifests when a developer deliberately passes attacker-controlled data to useHeadSafe inside a .server.vue component / server island or a NuxtIsland-rendered component. useHeadSafe exists precisely to sanitize such input, so the affected pattern is a security-conscious but mis-trusted coding path rather than a default behavior - I assess AC:H rather than the vendor's AC:L for this reason (see assessed vector). Net: real priority only for Nuxt (3.13.0-4.6.1) applications that use server islands AND feed untrusted data through useHeadSafe; for everyone else this is low real-world risk. No conflicting signals in the data, but the absence of EPSS/KEV/POC means spread cannot be quantified. |
| Exploit ScenarioDerived | An attacker submits a crafted value (e.g. containing an event-handler attribute or script content) through an input that the target Nuxt app forwards to useHeadSafe within a server-island/.server.vue component. Because the server-island renderer drops the safe-input marker, NuxtIsland re-inserts the value into the page head as an ordinary entry, bypassing the allowlist. When another user loads the page, the payload executes as stored XSS in the application origin. No public proof-of-concept was provided; the referenced GitHub link is the remediation commit, not exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 21, 2026
Stored cross-site scripting (CWE-79) affects Nuxt 3.13.0 through 4.6.1 when server islands are combined with useHeadSafe: the island renderer serializes raw head input without preserving the safe-input marker, so NuxtIsland re-inserts it as an ordinary head entry and the allowlist no longer strips event-handler attributes or executable script. A victim must load the poisoned island page for the payload to fire. This is a genuine but conditional, medium-severity issue: the vulnerable pattern requires application code that passes attacker-controlled data into useHeadSafe inside a .server.vue component or a NuxtIsland-rendered component, which is non-default developer code. No public exploit identified at time of analysis, and no KEV listing is present.
RemediationAI
Upgrade Nuxt to 4.6.2 or later, which incorporates the fix in commit 493565e99451a0f52330b1f6b979254a4a39e5d0 and restores the useHeadSafe allowlist across the island serialization boundary (see https://github.com/nuxt/nuxt/releases/tag/v4.6.2 and advisory https://github.com/nuxt/nuxt/security/advisories/GHSA-xfq5-w38q-pc2x). If immediate upgrade is not possible, the primary compensating control is code-level: audit all .server.vue components and NuxtIsland-rendered components for calls that pass user-controlled data into useHeadSafe, and strip or strictly validate/encode those values before use - or remove useHeadSafe-driven head injection from island responses entirely, accepting reduced per-page metadata flexibility. Because the issue requires stored attacker data (PR:L) plus victim page load (UI:R), adding output encoding on the fields that reach head tags and shortening content-script lifetimes reduce exposure but do not fix the marker-loss flaw. Restricting who can write the data that feeds these head entries (input validation at the write path) lowers risk without removing it, and generic header/CSP hardening against inline script and inline event handlers can block some payload variants but may break legitimate application functionality.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Nuxt's server-island pipeline renders .server.vue components and embeds the resulting head entries into the island response. The useHeadSafe API normally applies Unhead's SafeInputPlugin allowlist, which drops disallowed attributes such as on* event handlers, javascript: URLs on links, and raw script textContent. In the vulnerable range, that safe-input marker was not carried across serialization: the entry was emitted as a plain head entry, and the client-side NuxtIsland hydration pushed it back into the page head as an ordinary entry, bypassing the allowlist entirely. The upstream fix (commit 493565e, released in v4.6.2) adds a toSafeHeadInput utility that re-applies SafeInputPlugin to resolved input when entry.options._safe is set, reconstructing sanitized values, joining Set/Map-based props, and JSON-serializing allowed script payloads (e.g. application/ld+json) with escaped </script> sequences. The underlying weakness class is improper neutralization of input during web page generation (CWE-79), specifically a sanitization-context loss across a serialization boundary rather than a flaw in the allowlist itself.
Know when Nuxt gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
AC:H because exploitation depends on the app deliberately routing untrusted data through useHeadSafe in a server island (non-default); PR:L to store data, UI:R for victim viewing, S:C and C:L/I:L for browser-context stored XSS.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Nuxt is an open-source web development framework for Vue.js. From 3.13.0 until 4.6.2, the server-island renderer serializes raw useHeadSafe entry input into the island response without preserving the safe-input marker, and NuxtIsland later inserts that input into the page head as an ordinary entry. An application that passes attacker-controlled data to useHeadSafe in a .server.vue component or page, or in a component rendered through NuxtIsland, can therefore render values normally removed by the allowlist, including event-handler attributes or executable script content, resulting in stored cross-site scripting in the application origin. This issue is fixed in version 4.6.2 .
Blast Radius
ecosystem impact- 2 npm packages depend on nuxt (2 direct, 0 indirect)
Ecosystem-wide dependent count for version 3.13.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Code Injection in GitHub repository nuxt/nuxt prior to 3.5.3. Rated critical severity (CVSS 9.8), this vulnerability is
Nuxt is a free and open-source framework to create full-stack web applications and websites with Vue.js. Rated high seve
Nuxt is a free and open-source framework to create full-stack web applications and websites with Vue.js. Rated high seve
Nuxt is a free and open-source framework to create full-stack web applications and websites with Vue.js. Rated high seve
Unauthenticated server-side request forgery in Nuxt OG Image (the npm package nuxt-og-image) 6.0.2 through 6.6.x allows
A vulnerability in Nuxt DevTools has been fixed in version **2.6.4***. Rated medium severity (CVSS 6.9), this vulnerabil
Nuxt is a free and open-source framework to create full-stack web applications and websites with Vue.js. Rated medium se
Cross-site Scripting (XSS) - Generic in GitHub repository nuxt/framework prior to 3.2.1. Rated medium severity (CVSS 6.1
Cross-site Scripting (XSS) - Reflected in GitHub repository nuxt/framework prior to v3.0.0-rc.13. Rated medium severity
Use of Hard-coded Credentials in GitHub repository nuxtlabs/github-module prior to 1.6.2. Rated critical severity (CVSS
Authentication/authorization bypass in Clerk's official JavaScript SDKs (@clerk/nextjs, @clerk/nuxt, @clerk/astro, and t
Route-rule middleware bypass in Nuxt 3.11.0-3.21.6 and 4.0.0-4.4.6 allows remote attackers to evade routeRules-defined p
EUVD-2026-107417
GHSA-xfq5-w38q-pc2x
NVD
CVE.org
EPSS
Exploit-DB