Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N
Network-accessible auth bypass with no privileges or interaction needed; C:H for SSR data exposure, I:L for incidental write access on protected pages, A:N.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
4Blast Radius
ecosystem impact- 2 npm packages depend on nuxt (2 direct, 0 indirect)
Ecosystem-wide dependent count for version 4.4.7.
DescriptionCVE.org
Nuxt is an open-source web development framework for Vue.js. From 3.21.7 until 3.21.10 and 4.5.1, mixed-case routeRules keys can fail to match case-folded lookups when router.options.sensitive is false and drop appMiddleware authorization gates. This is caused by an incomplete fix for CVE-2026-53721. This issue is fixed in 3.21.10 and 4.5.1.
AnalysisAI
Authorization gate bypass in Nuxt (npm package, versions 3.21.7-<3.21.10 and 4.4.7-<4.5.1) allows unauthenticated network access to routes protected by appMiddleware auth rules whenever those route-rule keys contain uppercase characters. This is an incomplete fix for CVE-2026-53721: the prior patch case-folded the lookup path before matching route rules, but left the compiled rule keys verbatim, producing a permanent symmetric mismatch that silently drops all app-level protections for any mixed-case route. No public exploit has been identified at time of analysis; however, the vulnerable condition arises automatically in any Nuxt application deriving route rules from PascalCase page files (e.g., pages/Admin.vue) or writing mixed-case routeRules keys explicitly.
Technical ContextAI
CWE-178 (Improper Handling of Case Sensitivity) describes the root cause precisely. Nuxt's app-level route-rule matcher is built on rou3, which stores and matches route keys case-sensitively. Vue-router - and by extension Nuxt - matches page routes case-insensitively by default (router.options.sensitive defaults to false). The fix for CVE-2026-53721 / GHSA-mm7m-92g8-7m47 addressed this mismatch by lowercasing the lookup path before passing it to the rou3 matcher, but neglected to also lowercase the route-rule keys at compile time. The result is that a rule keyed '/Admin' is stored verbatim in the compiled matcher, while every runtime lookup arrives as '/admin' - the two can never match. The diff in packages/nitro-server/src/index.ts introduces a foldRouteRuleKey helper that lowercases keys at build time (when caseSensitiveRouteRules is false), and emits both a verbatim and a folded matcher, selecting between them at runtime based on routerOptions.sensitive. The CPE-identified package is npm/nuxt; affected ranges are >=3.21.7 <3.21.10 and >=4.4.7 <4.5.1. Only Nuxt's own app-level route-rule subsystem is affected - Nitro's server-side matcher (used for per-route headers, server redirect, and proxy rules) uses its own case-sensitive logic and is explicitly out of scope per the GHSA advisory.
RemediationAI
The primary fix is to upgrade to nuxt@3.21.10 (3.x branch) or nuxt@4.5.1 (4.x branch), both available on npm and confirmed by GitHub release tags at https://github.com/nuxt/nuxt/releases/tag/v3.21.10 and https://github.com/nuxt/nuxt/releases/tag/v4.5.1. The patches implement symmetric case-folding at both compile time (route-rule keys) and runtime (lookup path), gated on router.options.sensitive. Three workarounds are available for deployments that cannot upgrade immediately. First, rewrite all routeRules keys to lowercase and rename any PascalCase page files to lowercase equivalents - this ensures keys already match the folded lookup path, with no change to routing behavior but requiring ongoing discipline to maintain. Second, set router: { options: { sensitive: true } } in nuxt.config - this disables case-folding on both sides, but requires that all client requests use exact casing matching the page file names, which can break bookmarked or user-typed URLs. Third, enforce authentication via a Nitro server middleware (server/middleware/auth.ts) rather than appMiddleware route rules - this moves the auth gate to the server side, which is unaffected by this vulnerability, but requires duplicating or restructuring authorization logic outside Nuxt's app-layer convention. The GHSA advisory at https://github.com/nuxt/nuxt/security/advisories/GHSA-hxvh-4h3w-prp9 confirms all three workarounds.
Same weakness CWE-178 – Improper Handling of Case Sensitivity
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-53645
GHSA-hxvh-4h3w-prp9