CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-114132

CVE-2026-114132: Case-Sensitivity Route Rule Bypass in Nuxt Framework

Amit Schendel
Amit Schendel
Senior Security Researcher

Oct 23, 2026·6 min read·4 visits

Executive Summary (TL;DR)

A case-sensitivity mismatch between Nitro server route rules and the Nuxt Vue page router allows attackers to bypass security headers, redirects, and proxy rules by requesting paths with altered casing (e.g., `/Admin/secret` instead of `/admin/secret`).

Nuxt versions prior to 4.6.2 suffer from a route rule bypass vulnerability caused by an architectural mismatch in case-sensitivity handling between the Nitro server runtime and the Vue page router. An unauthenticated remote attacker can bypass server-enforced route directives—such as redirects, security headers, and SSR controls—by altering character casing in HTTP request paths.

Vulnerability Overview

Nuxt is an open-source web development framework built on Vue.js that utilizes Nitro as its underlying server engine. In Nuxt applications, administrators define server-side operational behaviors using the routeRules configuration object within nuxt.config.ts. These rules govern server-level features including HTTP redirects, security header injections, proxy forwarding, rendering mode toggles (ssr: false), and script execution restrictions (noScripts).

The framework exposes an operational mismatch between client-side routing resolution and server-side request evaluation. By default, Nuxt configures client-side page routing with case-insensitive path matching (router.options.sensitive: false). Under this configuration, an incoming request for /Admin/secret resolves to the same Vue page component as /admin/secret.

Prior to version 4.6.2, Nitro evaluated server-side routeRules strictly against the raw case-sensitive path string provided in the HTTP request line. When an HTTP request contained character casing that differed from the rule definitions in nuxt.config.ts, Nitro failed to match the defined route rule and returned an empty directive set. Consequently, the request bypassed server-side protections while successfully rendering the underlying page component.

Root Cause Analysis

The fundamental flaw lies in inconsistent path normalization across the architectural boundary separating Nitro's server router and Nuxt's page router. Classified under CWE-178 (Improper Handling of Case Sensitivity) and CWE-863 (Incorrect Authorization), the vulnerability occurs because Nitro's internal router matched request paths literally without applying case-folding transformations when router.options.sensitive was disabled.

Consider a scenario where an application configures a security restriction or redirect rule in nuxt.config.ts:

export default defineNuxtConfig({
  routeRules: {
    '/admin/**': { redirect: { to: '/login', statusCode: 307 } },
    '/docs': { headers: { 'x-docs-security': '1' } },
    '/app/spa': { ssr: false }
  }
})

When a client issues an HTTP request for GET /Admin/dashboard, Nitro's request handler invokes getRouteRules(event). The matcher evaluates /Admin/dashboard against the stored key /admin/**. Because of the exact-match requirement in the radix tree comparison, the lookup fails to identify the rule and returns {}.

Following rule evaluation, the execution pipeline hands off request processing to the Vue page renderer. The client-side page router evaluates /Admin/dashboard, normalizes the route path case-insensitively, and renders app/pages/admin/dashboard.vue. The client receives the response without the enforcement of the intended redirect or security headers.

Code Analysis & Patch Review

Security fix f6cfee52cf9576ddc4f4ee83b486969328b358f8 by Daniel Roe addresses the discrepancy by introducing unified case normalization in Nitro's server runtime.

The fix introduces a dedicated server plugin (packages/nitro-server/src/runtime/plugins/route-rules.ts) and a normalized matching utility (packages/nitro-server/src/runtime/utils/route-rules.ts). The new implementation case-folds both configured keys and runtime HTTP path strings unless router.options.sensitive is explicitly enabled.

import { defu } from 'defu'
import type { H3Event } from 'h3'
import { useRuntimeConfig } from 'nitropack/runtime'
import type { NitroRouteRules } from 'nitropack/types'
import { createRouter, toRouteMatcher } from 'radix3'
import type { RouteMatcher } from 'radix3'
import { withoutBase } from 'ufo'
 
import { normalizeRouteRulePath } from '#internal/nuxt/route-rules.mjs'
 
let matcher: RouteMatcher | undefined
 
function getMatcher (): RouteMatcher {
  if (!matcher) {
    const routes: Record<string, NitroRouteRules> = {}
    // Normalize each configured route key according to router sensitivity options
    for (const [route, rules] of Object.entries(useRuntimeConfig().nitro?.routeRules || {})) {
      routes[normalizeRouteRulePath(route)] = rules as NitroRouteRules
    }
    matcher = toRouteMatcher(createRouter({ routes }))
  }
  return matcher
}
 
export function matchRouteRules (path: string): NitroRouteRules {
  // Normalize incoming request path prior to radix tree lookup
  return defu({}, ...getMatcher().matchAll(normalizeRouteRulePath(path)).reverse()) as NitroRouteRules
}

The fix ensures that normalizeRouteRulePath converts all route rule paths and incoming URL targets to lowercase when case-sensitivity is turned off, ensuring parity between server processing and page rendering.

Exploitation Methodology & Proof of Concept

Exploiting CVE-2026-114132 requires no authentication or specialized payload construction. An attacker only needs network access to an affected Nuxt server where security-relevant logic is delegated to routeRules.

Consider an deployment where administrative pages reside under /admin/**, protected by a redirect rule pointing unauthenticated traffic to /login:

# Standard request: Redirect rule triggers as intended
curl -i http://target-app.local/admin/dashboard
HTTP/1.1 307 Temporary Redirect
Location: /login
 
# Exploitation request: Bypasses server redirect rule, renders page
curl -i http://target-app.local/Admin/dashboard
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
 
<!-- Rendered administrative dashboard page content -->

The operational consequences vary based on the specific directive bypassed:

  1. Redirect Bypass: Bypasses global authentication or maintenance redirects configured via routeRules.
  2. Security Header Bypass: Strips security headers such as Content-Security-Policy, X-Frame-Options, or custom authorization headers defined under specific path prefixes.
  3. SSR Control Bypass: Forces Server-Side Rendering on paths intended to run strictly as Single Page Applications (ssr: false), causing unexpected server CPU load or memory usage.

Impact Assessment & Vector Analysis

The technical impact of CVE-2026-114132 is categorized as moderate integrity and confidentiality loss (CVSS v4.0 Score: 6.3). The CVSS vector is CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N.

The vulnerability does not grant arbitrary code execution or direct file system access. Instead, it degrades security controls that rely exclusively on server-side path rules. If application security relies on routeRules for access control or header-based security policies, those policies can be silently subverted.

> [!NOTE] > Access control checks implemented within custom middleware (server/middleware/), page middleware (defineNuxtRouteMiddleware), or component data fetching methods (useAsyncData / useFetch) process paths independently and are not vulnerable to this bypass.

Remediation & Mitigation Guidance

The primary remediation for CVE-2026-114132 is updating the nuxt dependency to version 4.6.2 or higher in the project root.

# Upgrade via pnpm
pnpm update nuxt@^4.6.2
 
# Upgrade via npm
npm install nuxt@^4.6.2
 
# Upgrade via yarn
yarn add nuxt@^4.6.2

If immediate dependency upgrades are not possible, administrators can apply a temporary workaround in nuxt.config.ts by explicitly enabling case-sensitive routing:

// nuxt.config.ts
export default defineNuxtConfig({
  router: {
    options: {
      sensitive: true
    }
  }
})

> [!IMPORTANT] > Configuring sensitive: true inside app/router.options.ts is insufficient to patch this vulnerability. The Nitro server engine reads the configuration directly from nuxt.config.ts during build time.

Official Patches

NuxtNuxt v4.6.2 Release Notes
GitHub Security AdvisoryGHSA-vjh5-4x84-xrqp Security Advisory

Fix Analysis (1)

Technical Appendix

CVSS Score
6.3/ 10
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
EPSS Probability
0.31%
Top 77% most exploited

Affected Systems

Nuxt Framework (npm package `nuxt` versions >= 4.1.3 and < 4.6.2)

Affected Versions Detail

Product
Affected Versions
Fixed Version
nuxt
nuxt
>= 4.1.3, < 4.6.24.6.2
AttributeDetail
CWE IDCWE-178 / CWE-863
CVSS v4.0 VectorCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
CVSS Score6.3 (Medium)
EPSS Score0.00314 (23.05th percentile)
Attack VectorNetwork (Unauthenticated HTTP)
Exploit StatusProof of Concept in Fix Commit
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-178
Improper Handling of Case Sensitivity

The software does not correctly handle case sensitivity when processing user input, leading to unexpected behavior or security rule bypasses.

Known Exploits & Detection

GitHub Fix Commit Test SuiteIntegration test validating routeRules case-sensitivity normalization across URL path variations.

Vulnerability Timeline

Security patch committed to Nuxt repository by Daniel Roe.
2026-10-15
Nuxt version 4.6.2 officially released.
2026-10-21
GitHub Security Advisory GHSA-vjh5-4x84-xrqp published.
2026-10-21
CVE-2026-114132 published to CVE / NVD databases.
2026-10-21

References & Sources

  • [1]GitHub Security Advisory GHSA-vjh5-4x84-xrqp
  • [2]Nuxt Fix Commit f6cfee52cf9576ddc4f4ee83b486969328b358f8
  • [3]Nuxt v4.6.2 Release
  • [4]CVE.org Record CVE-2026-114132
  • [5]NVD CVE-2026-114132 Detail

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•9 minutes ago•CVE-2026-114133
5.4

CVE-2026-114133: Stored Cross-Site Scripting via useHeadSafe in Nuxt Server Islands

A Stored Cross-Site Scripting (XSS) vulnerability exists in Nuxt Server Island rendering logic when utilizing the useHeadSafe composable. Raw head attributes bypass sanitization during island serialization.

Amit Schendel
Amit Schendel
0 views•4 min read
•about 2 hours ago•GHSA-78G4-XQWV-Q3G8
7.5

GHSA-78G4-XQWV-Q3G8: Heap-Based Buffer Overflow in Pillow (libopenjp2)

A heap-based buffer overflow vulnerability in Pillow PyPI binary wheels (versions 11.1.0 to 12.x) allows remote code execution or application crash via crafted JPEG 2000 files processed by the bundled libopenjp2 library.

Alon Barad
Alon Barad
15 views•4 min read
•about 3 hours ago•CVE-2026-109618
9.8

CVE-2026-109618: Remote Code Execution in PHP Core via Out-of-Memory longjmp() Uninitialized Memory Access

CVE-2026-109618 (dubbed PHP2Shell) is a critical vulnerability in the PHP engine core resulting from improper out-of-memory exception handling via longjmp(). When request allocation fails mid-processing, non-local control flow bypasses cleanup procedures, leaving memory structures uninitialized or in a use-after-free state during request shutdown.

Amit Schendel
Amit Schendel
10 views•5 min read
•about 3 hours ago•CVE-2026-109619
9.2

CVE-2026-109619: Remote Code Execution in PHP Core via Stale Global State Memory Corruption (PHP2Shell)

CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.

Alon Barad
Alon Barad
13 views•6 min read
•about 3 hours ago•CVE-2026-113721
4.5

CVE-2026-113721: Unsafe Link Resolution in virtualenv File Generation

In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.

Amit Schendel
Amit Schendel
4 views•5 min read
•10 days ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
31 views•5 min read