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-71316

CVE-2026-71316: Information Disclosure and Authorization Bypass in Nuxt Runtime Payload Caching

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 6, 2026·7 min read·2 visits

Executive Summary (TL;DR)

Nuxt version 4.4.0 introduced runtime payload caching across a globally shared storage keyspace. Because cache keys are derived strictly from the request path and are evaluated prior to route middleware execution, unauthenticated attackers can retrieve cached SSR payload files containing the private hydrated state of authorized users.

CVE-2026-71316 is a high-severity vulnerability affecting the Nuxt web development framework in versions 4.4.0 up to (but excluding) 4.5.1. Due to the lack of runtime isolation in the shared server runtime storage driver, unauthenticated remote attackers can query the static-like JSON representation of a route's server-side rendered (SSR) state (_payload.json) and bypass configured page guards and application middleware to obtain highly sensitive user session records.

Vulnerability Overview

Nuxt is an open-source web framework based on Vue.js that facilitates server-side rendering (SSR), static site generation, and hybrid caching strategies like Stale-While-Revalidate (SWR) and Incremental Static Regeneration (ISR). To optimize client-side hydration during subsequent page navigations, Nuxt extracts the serialized server-side rendering state (containing state hydrated by server-bound composables like useFetch or useAsyncData) and exposes it through static-like payload endpoints at /<page>/_payload.json.

Historically, writing to and reading from this payload cache was strictly confined to static site generation and prerendering environments where the code is executed in a controlled, non-dynamic setting. However, starting in Nuxt version 4.4.0, a refactoring of the internal runtime storage engines removed these guardrails. This change allowed runtime payload caching to be activated globally across the server environment within a shared memory or disk store named cache:nuxt:payload.

This global activation introduced a severe security flaw because the shared storage keyspace does not isolate cached payloads based on session identifiers, authorization headers, or cookies. Consequently, any dynamic, user-specific data server-rendered for an authenticated client is cached under a path-based key. When subsequent requests are made to the _payload.json endpoint for that path, the server returns the cached JSON without evaluating access control logic, leading to complete information disclosure of other users' sessions.

Root Cause Analysis

The root cause of CVE-2026-71316 lies in a combination of unsegmented global cache keying (CWE-524) and premature request interception that bypasses access control mechanisms (CWE-862). In Nuxt's server-side rendering pipeline, when a user accesses a route configured with SWR, ISR, or general caching rules, the system attempts to determine if a pre-rendered payload already exists. This lookup resolves inside the Nitro server runtime handler before application-level middleware, page guards, or session checks are executed.

To construct the cache identifier, Nuxt employs a helper function named getPayloadCacheKey. This function generates keys using solely the request URL path (for example, /profile). Because variables like authorization headers, CSRF tokens, session cookies, and IP addresses are completely absent from the key derivation function, all users—regardless of their privilege levels or authentication states—are mapped to the exact same cache keyspace.

This design flaw creates a dangerous race and storage condition in multi-user environments. When an authenticated user triggers a page load, their unique, private user data is fetched on the backend and serialized into the SSR state. This private state is then saved to the global, shared payloadCache mapping. Subsequent requests from other, potentially unauthenticated users for the corresponding _payload.json file retrieve this stored entry directly from the global cache, entirely avoiding the page-level security controls that would normally prevent unauthorized access.

Code Analysis and Patch Walkthrough

To fully understand the implementation bug, we must review the vulnerability path in packages/nitro-server/src/runtime/handlers/renderer.ts. In the vulnerable versions (Nuxt 4.4.0 up to 4.5.0), the handler processed requests for dynamic payloads by resolving them against the shared payload cache unconditionally at runtime:

// VULNERABLE IMPLEMENTATION
const cacheKey = getPayloadCacheKey(ssrContext.url)
if (payloadCache && await payloadCache.hasItem(cacheKey)) {
  // Returns the cached response immediately, bypassing route middleware entirely
  return payloadCache.getItem(cacheKey) as Promise<Partial<RenderResponse>>
}

The corresponding patch in commit ac9b41a36b62296a117862254ee7d2b21a2a5203 enforces that payload cache lookups and writes are restricted to static generation/prerendering by validating import.meta.prerender:

// PATCHED IMPLEMENTATION IN v4.5.1
const cacheKey = getPayloadCacheKey(ssrContext.url)
// Check that the request occurs strictly during static site generation / prerendering
if (import.meta.prerender && payloadCache && await payloadCache.hasItem(cacheKey)) {
  return payloadCache.getItem(cacheKey) as Promise<Partial<RenderResponse>>
}

Additionally, the patch disabled the instantiation of the runtime payload cache storage entirely within packages/nitro-server/src/runtime/utils/cache.ts. By setting the export to null unless the framework is executing inside a prerender pipeline, any runtime attempts to reference payloadCache evaluate as false, effectively preventing runtime storage contamination:

// PATCHED cache.ts - Runtime payload cache is disabled
export const payloadCache: Storage | null = import.meta.prerender
  ? useStorage('internal:nuxt:prerender:payload')
  : null

This structural fix is highly complete and robust. By decoupling runtime request processing from the global payload storage entirely and forcing the runtime to execute the full SSR render pipeline, Nuxt ensures that every runtime dynamic request evaluates application-level middlewares, route rules, and authentication guards.

Exploitation & Attack Methodology

Exploitation of this vulnerability is straightforward and requires no advanced privileges or specialized tooling. The primary requirement is that the targeted route must employ Stale-While-Revalidate (SWR) or Incremental Static Regeneration (ISR) rules, and must handle user-specific sensitive data via SSR composables. The attacker first identifies such endpoints, typically dashboard subpaths or profile routes, which exhibit static-like suffix targets.

Once a route like /account/settings is target-mapped, the exploit relies on standard client navigation. When a legitimate, authorized user logs in and navigates to /account/settings, the server retrieves their profile details, generates the server-side state, and outputs the page content. Concurrently, the server saves the serialized data into the /account/settings/_payload.json cache index.

An unauthenticated attacker can then issue a direct HTTP GET request targeting the _payload.json endpoint of that route. Because the server evaluates the request against the shared cache keyspace first, it matches the active cache entry and returns the full JSON representation of the authorized user's state. The response includes sensitive variables like API tokens, email addresses, and database records, bypassing all front-end and back-end route guards.

Impact Assessment

The impact of CVE-2026-71316 is classified as High, with a CVSS v3.1 base score of 7.5. The primary security impact is the unauthorized disclosure of high-confidentiality user records, session identifiers, and proprietary data. In modern single-page applications built on Nuxt, server-side data extraction often contains sensitive metadata, internal API keys, database identifiers, and personally identifiable information (PII) required to hydrate the client-side state.

Because the information disclosure occurs at the server framework layer, standard browser-level protections such as the Same-Origin Policy (SOP) or Cross-Origin Resource Sharing (CORS) provide no defense against direct server querying. Any remote, unauthenticated attacker on the internet can scan and query these endpoints at scale, resulting in widespread account harvesting and session hijacking if session tokens are exposed within the SSR payload state.

Fortunately, there is currently no evidence of active exploitation in the wild, and the vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. However, due to the trivial nature of the exploit sequence and the ubiquity of Nuxt in modern web architectures, the risk of weaponization remains high for unpatched applications that rely on hybrid rendering and caching strategies.

Remediation and Long-Term Mitigation

The recommended path to remediation is upgrading the Nuxt installation to version 4.5.1 or higher. This release contains the complete set of patches that restrict runtime payload extraction to static build contexts and disable runtime global caching drivers. Developers should execute a clean dependency resolution (npm update nuxt or yarn upgrade nuxt) and verify their locks to confirm that the resolved version satisfies the safe range.

In scenarios where immediate upgrades are blocked by architectural constraints, developers can temporarily mitigate the risk by globally disabling runtime payload extraction. This is accomplished by setting the payloadExtraction flag to false in the nuxt.config.ts configuration file. This setting stops the framework from writing dynamic JSON payloads and forces client-side hydrations to fallback to standard server-rendered HTML blocks.

// nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    payloadExtraction: false
  }
})

Additionally, operations teams should inspect downstream caching systems, such as Content Delivery Networks (CDNs), web application firewalls (WAFs), or reverse proxies. Rules must be defined to strip or ignore caching headers for any URL ending in _payload.json if those routes handle authentication or user-specific records. Finally, immediate cache purges should be triggered across all CDN edges to eliminate stale, poisoned payloads that may have been cached prior to applying the patch.

Fix Analysis (1)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Affected Systems

Nuxt Web Framework

Affected Versions Detail

Product
Affected Versions
Fixed Version
Nuxt
Nuxt
>= 4.4.0, < 4.5.14.5.1
AttributeDetail
CWE IDCWE-524, CWE-862
Attack VectorNetwork (AV:N)
CVSS v3.17.5 (High)
EPSS ScoreNot Assigned
Vulnerability ImpactInformation Disclosure & Authorization Bypass
Exploit StatusProof-of-Concept / Technical Analysis Available
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-524
Use of Cache Containing Sensitive Information

The application caches the static-like JSON representation of a route's server-side rendered (SSR) state in a shared storage keyspace without isolating data by authentication state, session cookies, or authorization headers.

References & Sources

  • [1]GitHub Security Advisory GHSA-wm8w-6qjm-cv43
  • [2]Fix Commit
  • [3]Nuxt v4.5.1 Release
  • [4]CVE.org Authority Record

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

•4 minutes ago•CVE-2026-71313
6.9

CVE-2026-71313: Local Directory Traversal in rclone via Unsafe Encoding Configurations

A local encoding path traversal vulnerability exists in rclone versions from v1.51.0 up to v1.75.0. When non-default local encoding parameters (such as Slash, None, or Raw) are specified, rclone's standard decoder maps safely encoded fullwidth dot-dot characters back into native directory traversal components. Since the local backend historically lacked a post-resolution path containment check, these relative segments resolved outside the designated synchronization root, allowing arbitrary file creation and modification on the host system.

Amit Schendel
Amit Schendel
0 views•7 min read
•about 1 hour ago•CVE-2026-71315
8.2

CVE-2026-71315: Nuxt route rules silently dropped for mixed-case paths, bypassing appMiddleware auth gates (incomplete fix for CVE-2026-53721)

An security bypass vulnerability exists in Nuxt frameworks where route rules containing mixed-case characters are silently dropped during case-insensitive routing. This occurs because lookups are folded to lowercase, but keys are stored in their original casing in the route-matching trie. As a result, critical authorization middleware, such as appMiddleware, is bypassed, allowing unauthorized access to restricted pages.

Amit Schendel
Amit Schendel
1 views•7 min read
•about 3 hours ago•CVE-2026-71318
4.8

CVE-2026-71318: Unauthorized Component Instantiation via Nuxt Server Island Props

CVE-2026-71318 is a vulnerability in Nuxt where unauthenticated remote attackers can trigger unauthorized component instantiation and arbitrary HTML element injection. This security flaw is caused by default attribute inheritance (fallthrough) combined with polymorphic root components inside island components accessible via the /__nuxt_island/ endpoint. Attackers can bypass standard routing checks to instantiate globally registered components or inject raw HTML tags like iframes. This vector is highly reachable since it does not require enabling the vue.runtimeCompiler option. It is patched in Nuxt versions 3.21.10 and 4.5.1.

Alon Barad
Alon Barad
2 views•9 min read
•about 4 hours ago•CVE-2026-71319
9.6

CVE-2026-71319: Remote Code Execution via Unauthenticated RPC in Nuxt DevTools

An unauthenticated remote code execution (RCE) vulnerability exists in Nuxt DevTools prior to version 3.3.1. The vulnerability arises from an unauthenticated RPC channel exposed over the Vite Hot Module Replacement (HMR) WebSocket server, allowing an attacker to modify file editor configurations and execute arbitrary commands under the server context.

Alon Barad
Alon Barad
6 views•4 min read
•about 5 hours ago•CVE-2026-71320
8.1

CVE-2026-71320: Remote Code Execution in Nuxt via Server-Side Template Injection in Server Islands

A highly critical Server-Side Remote Code Execution (RCE) vulnerability exists in the Nuxt framework when Server Islands and the Vue runtime compiler are simultaneously enabled. This allows unauthenticated remote attackers to execute arbitrary system commands on the host process by passing a crafted component definition object to the dynamic component resolution engine via public island endpoints.

Alon Barad
Alon Barad
5 views•9 min read
•about 6 hours ago•CVE-2026-71321
7.5

CVE-2026-71321: Unauthenticated Denial of Service and CPU Exhaustion in Nuxt Island Renderer

An unauthenticated remote denial of service vulnerability exists in the Nuxt framework island renderer endpoint. By transmitting large or deeply nested JSON payloads, an attacker can block the single-threaded Node.js event loop, resulting in application-wide CPU exhaustion before signature verification occurs.

Amit Schendel
Amit Schendel
5 views•7 min read