Summary
CVE-2026-71315 is an incorrect-authorization vulnerability (CWE-178 / CWE-863) in Nuxt, the open-source web framework for Vue.js. When case-sensitive routing is disabled, mixed-case routeRules keys fail to match case-folded path lookups, silently dropping appMiddleware authorization gates and allowing unauthenticated access to protected routes. It carries a CVSS v3.1 base score of 8.2 (High).
Technical details
- Root cause: During route rule matching, Nuxt lowercases the lookup path but does not normalize the configured
routeRuleskeys. Mixed-case keys therefore never match the case-folded lookup, so their associated rules are silently skipped. This is an incomplete fix for CVE-2026-53721. - Trigger conditions: Case-sensitive routing is disabled (
router.options.sensitiveisfalse, the default) and one or morerouteRulesuse mixed-case keys (for example/Admin/dashboard) to attach anappMiddlewareauthorization gate. - Attack vector: Network — a remote, unauthenticated attacker requests the affected route without triggering the intended middleware.
- Impact: The
appMiddlewareauth gate fails to execute, permitting unauthenticated access to protected content, including SSR-fetched data exposure and client-side redirect middleware for protected routes.
Affected software
- Nuxt 3.x: >= 3.21.7 and < 3.21.10 (i.e., 3.21.7 through 3.21.9)
- Nuxt 4.x: >= 4.4.7 and < 4.5.1 (i.e., 4.4.7 through 4.5.0)
Severity
- CVSS v3.1 base score: 8.2 (High)
- Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N
Mitigation and recommended actions
- Immediate: Upgrade to Nuxt 3.21.10 or Nuxt 4.5.1, which contain the fix.
- If no patch can be applied:
- Name all route rules and page files in lowercase exclusively.
- Enable case-sensitive routing:
router: { options: { sensitive: true } }. - Implement server-side authentication middleware that does not rely on route rules.
How IONIX identifies potentially affected assets
IONIX matches the following signals against data already collected when it crawled the asset; identifying the technology sends no request beyond that crawl.
- Raw response body:
<div id="__nuxt",window.__NUXT__ - URL of a loaded script:
/_nuxt/ - JavaScript object present once the page runs:
$nuxt

