Skip to content
Hacktron Sign in [S]

Security changelog

Nuxt has 24 published advisories, 8 high or critical.

When a framework publishes a security advisory, this page tracks the details teams need for patch triage: affected ranges, fixed versions, CVEs, workarounds, severity, and the original advisory. Feature releases and routine changelog noise stay out.

  1. Nuxt server islands render useHeadSafe input without sanitisation

    Impact

    useHeadSafe restricts head input to an allowlist of safe tags and attributes. For example, bodyAttrs is limited to class and style, event handler attributes are removed, and <script> tags are only kept for JSON types.

    When useHeadSafe is called inside a server island (a .server.vue component 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
    CVE-2026-114133
    Medium

    Fixed in 4.6.2

  2. Incomplete fix for GHSA-934w-87qh-qr26: a javascript: URL prefixed with an ASCII control character executes from <NuxtLink> when pages is disabled

    Impact

    An application that renders <NuxtLink :to="..."> with a value it does not control can be made to render an anchor whose href executes 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, where pages resolves to false and Nuxt registers its own router in place of vue-router.

    • < 4.6.0
    CVE-2026-114130
    Low

    Fixed in 4.6.0

  3. Route rules are matched against the raw request path, so a percent-encoded segment can bypass appMiddleware on dynamic and catch-all routes

    Summary

    Nuxt compared routeRules keys 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’s appMiddleware never runs, including during server rendering.

    • >= 4.0.0, < 4.4.4
    • >= 3.11.0, < 3.21.4
    CVE-2026-114131
    Medium

    Fixed in 3.21.4, 4.4.4

  4. Server-side route rules (redirect, headers, proxy, ssr) are skipped for case-variant paths when routing is case-insensitive

    Impact

    With the default router.options.sensitive: false, Nuxt’s page router resolves routes case-insensitively, so /Admin renders 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
    CVE-2026-114132
    Medium

    Fixed in 4.6.2

  1. 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 --host for on-device testing), the default-enabled Chrome DevTools workspace endpoint GET /.well-known/appspecific/com.chrome.devtools.json returns 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
    CVE-2026-72744
    Medium

    Fixed in 3.21.10, 4.5.1

  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: false routing). 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
    CVE-2026-71315
    High

    Fixed in 3.21.10, 4.5.1

  2. Nuxt runtime payload cache discloses another user’s SSR data across users and to unauthenticated clients

    Impact

    When a page is covered by routeRules cache / swr / isr, Nuxt enables runtime payload extraction and serves /<page>/_payload.json. On affected versions the renderer stored the SSR payload in the shared cache:nuxt:payload storage under a path-only key (no cookie, authorization, or cache.varies dimension) and, on a later payload request, returned the cached entry before route middleware / page guards ran again.

    • >= 4.4.0, <= 4.5.0
    CVE-2026-71316
    High

    Fixed in 4.5.1

  3. 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 unauthenticated POST /__nuxt_island/<name>_<anything>.json with a large JSON body (for example ~4.6 MB / 150k keys) is fully read, destr-parsed, and run through ohash before 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
    CVE-2026-71321
    High

    Fixed in 3.21.10, 4.5.1

  4. 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-for over a prop (for example v-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 the v-for to 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
    CVE-2026-71314
    High

    Fixed in 3.21.10, 4.5.1

  5. 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, or h()), 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
    CVE-2026-71318
    Medium

    Fixed in 3.21.10, 4.5.1

  1. Cross-site scripting via <NoScript> slot content in Nuxt’s head components

    Impact

    Nuxt’s globally registered <NoScript> component (from @unhead/vue head components, re-exported by Nuxt) wrote its default-slot content to the innerHTML of 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
    CVE-2026-56317
    Low

    Fixed in 3.21.7, 4.4.7

  2. Nuxt dev server vite-node IPC socket is world-connectable on Linux

    Impact

    When running nuxt dev on 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/unix can 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
    CVE-2026-56301
    Medium

    Fixed in 3.21.7, 4.4.7

  3. Reflected XSS in <NuxtLink> via unsanitised javascript: or data: URL

    Summary

    <NuxtLink> did not validate the URL scheme of values bound to its to or href props before rendering them into the href attribute 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 a javascript: or vbscript: URL that is reflected verbatim into the rendered markup.

    • >= 4.0.0, < 4.4.7
    • >= 3.0.0, < 3.21.7
    CVE-2026-53722
    Medium

    Fixed in 3.21.7, 4.4.7

  4. Route-rule middleware bypass via case-sensitivity mismatch between vue-router and the routeRules matcher

    Impact

    Nuxt looks up routeRules for the current navigation by calling getRouteRules({ path: to.path }) from the page-router plugin and the no-pages router plugin. The compiled routeRules matcher (built on rou3) performs case-sensitive matching, while vue-router is configured with its default sensitive: false and 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
    CVE-2026-53721
    High

    Fixed in 3.21.7, 4.4.7

  5. URL-handling weaknesses in navigateTo and reloadNuxtApp: SSR open redirect, client-side script execution via the open option, and protocol-relative bypass in reloadNuxtApp

    Summary

    Three weaknesses in Nuxt’s client-navigation URL handling, all reachable from documented public APIs (navigateTo and reloadNuxtApp):

    1. (CVE-2026-56326) SSR open redirect in navigateTo via path-normalisation bypass. navigateTo decided whether a target was external by inspecting the raw input with hasProtocol(..., { 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
    CVE-2026-56326
    Medium

    Fixed in 3.21.7, 4.4.7

  1. Dev server discloses project absolute path and persistent workspace UUID via /.well-known/appspecific/com.chrome.devtools.json

    Summary

    When running nuxt dev, Nuxt registers an unauthenticated route at /.well-known/appspecific/com.chrome.devtools.json that returns the absolute filesystem path of the project root and a per-project UUID persisted to node_modules/.cache/nuxt/chrome-workspace.json. The route is enabled by default via experimental.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
    GHSA-rq7w-g337-39qq
    Low

    Fixed in 4.4.7

  1. Nuxt’s route middleware is not enforced when rendering .server.vue pages via /__nuxt_island/page_*

    Summary

    When experimental.componentIslands is enabled (default in Nuxt 4), any .server.vue file under pages/ is automatically registered as a server island under the key page_<routeName> and exposed via the /__nuxt_island/:name endpoint. 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 (including definePageMeta({ middleware })) did not run.

    • >= 3.11.0, <= 3.21.5
    • >= 4.0.0-alpha.1, <= 4.4.5
    CVE-2026-47200
    Medium

    Fixed in 3.21.6, 4.4.6

  1. __nuxt_island endpoint does not bind responses to request props, enabling shared-cache poisoning

    Summary

    The /__nuxt_island/* endpoint accepts attacker-controlled props query/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
    CVE-2026-46342
    Low

    Fixed in 3.21.6, 4.4.6

  2. Reflected XSS in navigateTo() external redirect

    Summary

    navigateTo() with external: true generates 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 to navigateTo(url, { external: true }) can break out of the content="…" 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
    CVE-2026-45669
    Medium

    Fixed in 3.21.6, 4.4.6

  1. 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_island objects. The issue affects the following flow:

    • >= 3.6.0, < 3.19.0
    • >= 4.0.0, < 4.1.0
    CVE-2025-59414
    Low

    Fixed in 3.19.0, 4.1.0

  1. 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.json which 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
    CVE-2025-27415
    High

    Fixed in 3.16.0

  1. nuxt vulnerable to Cross-site Scripting in navigateTo if used after SSR

    Summary

    The navigateTo function attempts to blockthe javascript: protocol, but does not correctly use API’s provided by unjs/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
    CVE-2024-34343
    Medium

    Fixed in 3.12.4

  2. Nuxt vulnerable to remote code execution via the browser when running the test locally

    Summary

    Due to the insufficient validation of the path parameter 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 NuxtTestComponentWrapper is available. https://github.com/nuxt/nuxt/blob/4779f5906fa4d3c784c2e2d6fe5a5c5f181faaec/packages/nuxt/src/app/components/nuxt-root.vue#L42-L43

    • >= 3.4.0, < 3.12.4
    CVE-2024-34344
    Critical

    Fixed in 3.12.4

  1. 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
    CVE-2023-3224
    Critical

    Fixed in 3.4.3

Contact

Book a demo or start for free.

Menu
[M]
Next in menu
[J]
Previous in menu
[K]
Find
[F]
Sign in
[S]
Copy page
[C]
Justification
[R]
Dark mode
[D]
Palette
[T]
High contrast
[H]
Shortcuts
[I]
Close
[esc]