Nuxt's May 2026 security release — four CVEs in the /__nuxt_island/* endpoint, including a route-middleware auth bypass (predates the July Server Island RCE batch)
TL;DR
Nuxt shipped a May 19, 2026 security release fixing four CVEs, all rooted in the same /__nuxt_island/* endpoint that also produced the already-tracked July 2026 Server Island RCE batch two months later. The headline bug, CVE-2026-47200, let an unauthenticated attacker bypass route-middleware-only authentication by requesting the island endpoint directly instead of the normal page route. Fixed in Nuxt 3.21.6 / 4.4.6. This is a distinct, earlier batch from the July one — same code area, same root cause pattern, different bugs.
What happened
Nuxt's component islands feature (experimental.componentIslands, default-on in Nuxt 4) lets a .server.vue page render server-side and be fetched independently via /__nuxt_island/page_<routeName>_<hash>. Because that endpoint renders the page component directly through the SSR renderer, it skipped the normal Vue Router instantiation that every other request path goes through — and route middleware (including definePageMeta({ middleware })) only runs as part of that router instantiation.
The practical effect: any Nuxt app that gates a .server.vue page behind route middleware as its sole authentication check (no additional server-side check) could have that check bypassed entirely by an unauthenticated attacker who requests /__nuxt_island/page_<routeName>_<anyhash> directly and receives the fully server-rendered HTML back.
Four CVEs shipped together in the same release, all fixed in Nuxt 3.21.6 / 4.4.6 (and the corresponding @nuxt/nitro-server, @nuxt/rspack-builder, @nuxt/webpack-builder versions):
- CVE-2026-47200 (GHSA-hg3f-28rg-4jxj) — CVSS 4.0: 6.3 moderate. Route middleware not enforced when rendering
.server.vuepages via the island endpoint, as described above. Affectsnuxt3.11.0–3.21.5 and 4.0.0-alpha.1–4.4.5;@nuxt/nitro-server3.20.0–3.21.5 and 4.2.0–4.4.5. - CVE-2026-46342 (GHSA-g8wj-3cr3-6w7v) — CVSS 4.0: 2.3 low. The same
/__nuxt_island/*endpoint accepts props via query parameters without server-side hash validation, letting an attacker "prime" a CDN cache for a given path with attacker-chosen props. In deployments combining path-only CDN caching with unsafe HTML sinks, this enables stored XSS that persists until the cache entry expires. Fixed by recomputing the expected hash server-side and rejecting mismatches with HTTP 400. - CVE-2026-45670 (GHSA-6m52-m754-pw2g) — CVSS 4.0: 5.9 moderate. An incomplete fix for an earlier source-exposure bug: running
nuxt dev --hostwith the rspack/webpack builder exposed application source to any site on the same network, because the original fix relied on browser-sent security headers that untrustworthy origins simply don't send. The revised patch validates the request'sHostheader when those headers are absent. Dev-only; exploitation needs--hostin use and Chrome < 142 (which added its own Local Network Access restrictions). - CVE-2026-45669 (GHSA-fx6j-w5w5-h468) — CVSS 4.0: 5.3 moderate.
navigateTo(url, { external: true })renders a server-side meta-refresh redirect but only escapes double quotes in the destination URL —<,>,&, and'pass through unencoded. A common pattern (post-login redirect from a query parameter) becomes a reflected-XSS injection point: the injected script executes in the page before the redirect fires.
How this relates to the July 2026 batch already in this repo: the July 27, 2026 release (CVE-2026-71320 Server Island RCE, CVE-2026-71318, CVE-2026-71316, CVE-2026-71314/-71321, CVE-2026-71315) fixed a second, separate set of island/server-component bugs discovered after this May batch shipped — it built on top of 3.21.6/4.4.6, going up to 3.21.10/4.5.1. Both batches share the same underlying attack surface (the /__nuxt_island/* endpoint and server-rendered component islands), which is worth noting for anyone auditing whether their Nuxt app relies on component islands at all: this is now the second security-relevant batch in three months rooted in that one feature.
Am I affected?
# Check your installed Nuxt version
npm ls nuxt --depth=0
# or
cat node_modules/nuxt/package.json | grep '"version"'
- Affected:
nuxt3.11.0–3.21.5 and 4.0.0-alpha.1–4.4.5. Fixed: ≥ 3.21.6 or ≥ 4.4.6 (and note you still need the July batch's 3.21.10/4.5.1 to be fully current). - You're most exposed to CVE-2026-47200 if
experimental.componentIslandsis enabled (Nuxt 4 default) and you have any.server.vuepage underpages/protected only bydefinePageMeta({ middleware: [...] })with no additional server-side auth check inside the page/component itself. - You're exposed to CVE-2026-45670 only if you run
nuxt dev --host(or equivalent) on a network with untrusted devices.
If you are affected
If CVE-2026-47200 applied to an authentication-gated page in production, treat it as a potential unauthorized-access incident: check server/CDN access logs for requests to /__nuxt_island/page_* paths that don't correspond to normal client-side navigation, especially from IPs with no prior session. See auditing-a-vibe-coded-repo.md for a general audit approach, and if-your-webapp-was-compromised.md if you find evidence of exploitation.
Prevention
- Upgrade to Nuxt ≥ 3.21.10 / 4.5.1 (covers both this batch and the July one) rather than stopping at 3.21.6/4.4.6.
- Don't rely on route middleware alone as your only auth boundary for a
.server.vuepage — add an explicit server-side check inside the component/page itself, since any endpoint that can render that component independently (now or in a future Nuxt feature) bypasses router-level middleware by construction. - See prevention/agent-sandboxing.md and prevention/ci-cd-hardening.md for related dev-server exposure hygiene (never run
--hostdev servers on untrusted networks).
Sources
- Netlify Changelog — Security update: multiple vulnerabilities in Nuxt (2026-05-19) — full list of all four CVEs, GHSA IDs, affected/patched version ranges, and descriptions for this batch.
- GitHub Security Advisory — GHSA-hg3f-28rg-4jxj (CVE-2026-47200) — CVSS 4.0 vector, exact affected/patched versions, full root-cause description.
- GitHub Security Advisory — GHSA-g8wj-3cr3-6w7v (CVE-2026-46342) — CVSS 4.0 vector, cache-poisoning/XSS description.
- GitHub Security Advisory — GHSA-6m52-m754-pw2g (CVE-2026-45670) — CVSS 4.0 vector, incomplete-fix description referencing the earlier CVE-2024-27498.
- GitHub Security Advisory — GHSA-fx6j-w5w5-h468 (CVE-2026-45669) — CVSS 4.0 vector, reflected-XSS description.
- GitHub — nuxt/nuxt security advisories index — confirms this May batch and the already-tracked July batch are separate releases.