Journal de sécurité
Nuxt a 25 bulletins publiés, dont 8 de sévérité élevée ou critique.
Quand un framework publie un bulletin de sécurité, cette page suit ce dont les équipes ont besoin pour trier les correctifs : plages concernées, versions corrigées, CVE, contournements, sévérité et bulletin d’origine. Les versions de fonctionnalités et le bruit habituel du changelog restent à l’écart.
-
Dot segments in the request path bypass
server/middlewarepath checks and server route rules on page routesSummary
Since
4.6.0, Nuxt resolves.and..segments in the request path, including percent-encoded forms such as%2e, before rendering a page. Nitro's routing, Nitro's route rules andserver/middlewaresee the path with those segments still in place. A request for/%2e/admintherefore renders the page at/admin, while server-side checks keyed on/admindo not apply.- >= 4.6.0, < 4.6.3
Moyenne Corrigé en 4.6.3
-
Nuxt server islands render
useHeadSafeinput without sanitisationImpact
useHeadSaferestricts head input to an allowlist of safe tags and attributes. For example,bodyAttrsis limited toclassandstyle, event handler attributes are removed, and<script>tags are only kept for JSON types.When
useHeadSafeis called inside a server island (a.server.vuecomponent or page, or a component rendered with<NuxtIsland>), the island renderer serialises the raw input of every head entry into the island response without the option that marks it as safe input.- >= 3.13.0, < 4.6.2
Moyenne Corrigé en 4.6.2
-
Incomplete fix for GHSA-934w-87qh-qr26: a
javascript:URL prefixed with an ASCII control character executes from<NuxtLink>whenpagesis disabledImpact
An application that renders
<NuxtLink :to="...">with a value it does not control can be made to render an anchor whosehrefexecutes script in the application’s origin when clicked.This is an incomplete fix for GHSA-934w-87qh-qr26 (CVE-2026-53722). It only affects applications running without a
pages/directory, wherepagesresolves tofalseand Nuxt registers its own router in place of vue-router.- < 4.6.0
Faible Corrigé en 4.6.0
-
Route rules are matched against the raw request path, so a percent-encoded segment can bypass
appMiddlewareon dynamic and catch-all routesSummary
Nuxt compared
routeRuleskeys against the raw request path, without decoding percent-encoding, while the router decodes parameters when it resolves a route. A request whose path is percent-encoded can therefore resolve to a page while failing to match the route rule meant to protect it, so the rule’sappMiddlewarenever runs, including during server rendering.- >= 4.0.0, < 4.4.4
- >= 3.11.0, < 3.21.4
Moyenne Corrigé en 3.21.4, 4.4.4
-
Server-side route rules (
redirect,headers,proxy,ssr) are skipped for case-variant paths when routing is case-insensitiveImpact
With the default
router.options.sensitive: false, Nuxt’s page router resolves routes case-insensitively, so/Adminrenders the same page as/admin. On the server, however, route rules were resolved with Nitro’s route-rule matcher, which matches keys case-sensitively. A request whose path differs from a rule key only in letter case therefore rendered the page with none of that rule applied.- >= 4.0.0, < 4.6.2
- >= 3.0.0, < 4.0.0
Moyenne Corrigé en 4.6.2
-
Nuxt dev server discloses project root and workspace UUID via the Chrome DevTools workspace endpoint
Impact
When a Nuxt dev server is bound to a network-reachable interface (for example
nuxt dev --hostfor on-device testing), the default-enabled Chrome DevTools workspace endpointGET /.well-known/appspecific/com.chrome.devtools.jsonreturns the absolute project root (workspace.root, i.e.rootDir) and a persistent per-project workspace UUID.- >= 4.4.7, < 4.5.1
- >= 3.21.7, < 3.21.10
Moyenne Corrigé en 3.21.10, 4.5.1
-
Nuxt route rules silently dropped for mixed-case paths, bypassing appMiddleware auth gates (incomplete fix for CVE-2026-53721)
Impact
Nuxt matches route rules case-insensitively by default (mirroring vue-router’s default
sensitive: falserouting). The fix for GHSA-mm7m-92g8-7m47 / CVE-2026-53721 lowercased the lookup path before matching route rules, but the route-rule keys compiled into the matcher were left verbatim.- >= 4.4.7, < 4.5.1
- >= 3.21.7, < 3.21.10
Élevée Corrigé en 3.21.10, 4.5.1
-
Nuxt runtime payload cache discloses another user’s SSR data across users and to unauthenticated clients
Impact
When a page is covered by
routeRulescache/swr/isr, Nuxt enables runtime payload extraction and serves/<page>/_payload.json. On affected versions the renderer stored the SSR payload in the sharedcache:nuxt:payloadstorage under a path-only key (no cookie,authorization, orcache.variesdimension) and, on a later payload request, returned the cached entry before route middleware / page guards ran again.- >= 4.4.0, <= 4.5.0
Élevée Corrigé en 4.5.1
-
Unauthenticated CPU exhaustion parsing and hashing the Nuxt island endpoint body before hash validation
Impact
The internal island renderer endpoint (
/__nuxt_island/...) decodes and hashes attacker-controlled request input before it validates the URL-resident hash. An unauthenticatedPOST /__nuxt_island/<name>_<anything>.jsonwith a large JSON body (for example ~4.6 MB / 150k keys) is fully read,destr-parsed, and run throughohashbefore the request is rejected with a 400. Because Nitro runs on a single event loop, this both wastes CPU on the doomed request and delays every concurrent request.- >= 4.0.0, < 4.5.1
- >= 3.1.0, < 3.21.10
Élevée Corrigé en 3.21.10, 4.5.1
-
Unauthenticated out-of-memory crash via unbounded v-for expansion in island rendering
Impact
An unauthenticated attacker can crash a Nuxt server that renders any island / server component containing a
v-forover a prop (for examplev-for="n in count"or a<slot v-for>). Because the island URL hash is a non-secret digest of the request, the attacker can compute a valid hash for arbitrary props and send the iterated prop as a large integer. The server then expands thev-forto that many nodes during SSR, allocating memory proportional to the attacker’s number.- >= 4.0.0, < 4.5.1
- >= 3.1.0, < 3.21.10
Élevée Corrigé en 3.21.10, 4.5.1
-
Unauthorized Component Instantiation via Server Island Props
Impact
Nuxt server islands accept props via the
/__nuxt_island/endpoint. When an application has a server island component that forwards props directly into Vue’s dynamic component resolution (<component :is>,resolveDynamicComponent, orh()), an attacker can pass a plain string value (rather than a component definition) to instantiate any globally-registered Vue component or any native HTML element.For example:
{ "as": "SomeGlobalComponent" }- >= 4.0.0, < 4.5.1
- >= 3.1.0, < 3.21.10
Moyenne Corrigé en 3.21.10, 4.5.1
-
Cross-site scripting via <NoScript> slot content in Nuxt’s head components
Impact
Nuxt’s globally registered
<NoScript>component (from@unhead/vuehead components, re-exported by Nuxt) wrote its default-slot content to theinnerHTMLof the<noscript>head tag, bypassing the HTML escaping that{{ }}interpolation normally applies in Vue templates.Applications that placed untrusted, attacker-controllable data inside a
<NoScript>slot, for example:<NoScript>{{ route.query.banner }}</NoScript>- >= 4.0.0, < 4.4.7
- < 3.21.7
Faible Corrigé en 3.21.7, 4.4.7
-
Nuxt dev server vite-node IPC socket is world-connectable on Linux
Impact
When running
nuxt devon Linux (Node.js 20+, outside Docker / StackBlitz), Nuxt’s internal vite-node IPC server binds to a Linux abstract-namespace Unix socket (\0nuxt-vite-node-<pid>-<ts>.sock). Abstract sockets have no filesystem inode and therefore no permission bits: any local UID on the host that can read/proc/net/unixcan enumerate the socket and connect to it.The IPC server does not perform any peer-credential or shared-secret check before dispatching requests.
- >= 4.0.0, < 4.4.7
- >= 3.18.0, < 3.21.7
Moyenne Corrigé en 3.21.7, 4.4.7
-
Reflected XSS in
<NuxtLink>via unsanitisedjavascript:ordata:URLSummary
<NuxtLink>did not validate the URL scheme of values bound to itstoorhrefprops before rendering them into thehrefattribute of the underlying<a>element. When an application binds attacker-controlled input (a query parameter, a CMS field, a user-supplied profile URL) to<NuxtLink :to>or:href, the attacker can supply ajavascript:orvbscript:URL that is reflected verbatim into the rendered markup.- >= 4.0.0, < 4.4.7
- >= 3.0.0, < 3.21.7
Moyenne Corrigé en 3.21.7, 4.4.7
-
Route-rule middleware bypass via case-sensitivity mismatch between vue-router and the routeRules matcher
Impact
Nuxt looks up
routeRulesfor the current navigation by callinggetRouteRules({ path: to.path })from the page-router plugin and the no-pages router plugin. The compiledrouteRulesmatcher (built onrou3) performs case-sensitive matching, while vue-router is configured with its defaultsensitive: falseand matches paths case-insensitively.The two routers therefore disagree on which rules apply to a given request path: vue-router still matches the page record for
- >= 4.0.0, < 4.4.7
- >= 3.11.0, < 3.21.7
Élevée Corrigé en 3.21.7, 4.4.7
-
URL-handling weaknesses in
navigateToandreloadNuxtApp: SSR open redirect, client-side script execution via theopenoption, and protocol-relative bypass inreloadNuxtAppSummary
Three weaknesses in Nuxt’s client-navigation URL handling, all reachable from documented public APIs (
navigateToandreloadNuxtApp):- (CVE-2026-56326) SSR open redirect in
navigateTovia path-normalisation bypass.navigateTodecided whether a target was external by inspecting the raw input withhasProtocol(..., { acceptRelative: true }). Inputs such as/..//evil.com,/.//evil.com,/%2e%2e//evil.com, or
- >= 4.0.0, < 4.4.7
- >= 3.5.0, < 3.21.7
Moyenne Corrigé en 3.21.7, 4.4.7
- (CVE-2026-56326) SSR open redirect in
-
Dev server discloses project absolute path and persistent workspace UUID via
/.well-known/appspecific/com.chrome.devtools.jsonSummary
When running
nuxt dev, Nuxt registers an unauthenticated route at/.well-known/appspecific/com.chrome.devtools.jsonthat returns the absolute filesystem path of the project root and a per-project UUID persisted tonode_modules/.cache/nuxt/chrome-workspace.json. The route is enabled by default viaexperimental.chromeDevtoolsProjectSettings: true.The endpoint exists to let Chrome DevTools’ Workspace integration map sources to the developer’s local checkout.
- >= 4.0.0-alpha.1, < 4.4.7
Faible Corrigé en 4.4.7
-
Nuxt’s route middleware is not enforced when rendering
.server.vuepages via/__nuxt_island/page_*Summary
When
experimental.componentIslandsis enabled (default in Nuxt 4), any.server.vuefile underpages/is automatically registered as a server island under the keypage_<routeName>and exposed via the/__nuxt_island/:nameendpoint. Until this fix, requests through that endpoint rendered the page component directly via the SSR renderer without instantiating Vue Router, which meant route middleware declared on the page (includingdefinePageMeta({ middleware })) did not run.- >= 3.11.0, <= 3.21.5
- >= 4.0.0-alpha.1, <= 4.4.5
Moyenne Corrigé en 3.21.6, 4.4.6
-
__nuxt_islandendpoint does not bind responses to request props, enabling shared-cache poisoningSummary
The
/__nuxt_island/*endpoint accepts attacker-controlledpropsquery/body parameters and renders any island component without verifying that the URL-resident hash (<Name>_<hashId>.json) was actually issued for those inputs by<NuxtIsland>. The hash is computed and embedded client-side but never validated server-side, so the same path can return materially different responses depending on the query.- >= 3.1.0, <= 3.21.5
- >= 4.0.0-alpha.1, <= 4.4.5
Faible Corrigé en 3.21.6, 4.4.6
-
Reflected XSS in
navigateTo()external redirectSummary
navigateTo()withexternal: truegenerates a server-side HTML redirect body containing a<meta http-equiv="refresh">tag. The destination URL is only sanitized by replacing"with%22, leaving<,>,&, and'unencoded. An attacker who can influence the URL passed tonavigateTo(url, { external: true })can break out of thecontent="…"attribute and inject arbitrary HTML/JavaScript that executes under the application’s origin.- >= 3.4.3, <= 3.21.5
- >= 4.0.0-alpha.1, <= 4.4.5
Moyenne Corrigé en 3.21.6, 4.4.6
-
Nuxt has Client-Side Path Traversal in Nuxt Island Payload Revival
Summary
A client-side path traversal vulnerability in Nuxt’s Island payload revival mechanism allowed attackers to manipulate client-side requests to different endpoints within the same application domain when specific prerendering conditions are met.
Technical Details
The vulnerability occurs in the client-side payload revival process (revive-payload.client.ts) where Nuxt Islands are automatically fetched when encountering serialized
__nuxt_islandobjects. The issue affects the following flow:- >= 3.6.0, < 3.19.0
- >= 4.0.0, < 4.1.0
Faible Corrigé en 3.19.0, 4.1.0
-
Nuxt allows DOS via cache poisoning with payload rendering response
Summary
By sending a crafted HTTP request to a server behind an CDN, it is possible in some circumstances to poison the CDN cache and highly impacts the availability of a site.
It is possible to craft a request, such as
https://mysite.com/?/_payload.jsonwhich will be rendered as JSON. If the CDN in front of a Nuxt site ignores the query string when determining whether to cache a route, then this JSON response could be served to future visitors to the site.- >= 3.0.0, < 3.16.0
Élevée Corrigé en 3.16.0
-
nuxt vulnerable to Cross-site Scripting in navigateTo if used after SSR
Summary
The
navigateTofunction attempts to blockthejavascript:protocol, but does not correctly use API’s provided byunjs/ufo. This library also contains parsing discrepancies.Details
The function first tests to see if the specified URL has a protocol. This uses the unjs/ufo package for URL parsing.
- < 3.12.4
Moyenne Corrigé en 3.12.4
-
Nuxt vulnerable to remote code execution via the browser when running the test locally
Summary
Due to the insufficient validation of the
pathparameter in the NuxtTestComponentWrapper, an attacker can execute arbitrary JavaScript on the server side, which allows them to execute arbitrary commands.Details
While running the test, a special component named
NuxtTestComponentWrapperis available. https://github.com/nuxt/nuxt/blob/4779f5906fa4d3c784c2e2d6fe5a5c5f181faaec/packages/nuxt/src/app/components/nuxt-root.vue#L42-L43- >= 3.4.0, < 3.12.4
Critique Corrigé en 3.12.4
-
nuxt Code Injection vulnerability
he Nuxt dev server between versions 3.4.0 and 3.4.3 is vulnerable to code injection when it is exposed publicly.
- >= 3.4.0, < 3.4.3
Critique Corrigé en 3.4.3