GHSA-hxcr-hm88-mpq6: High severity npm/nuxt vulnerability
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. Reporter figures: count=8000000 produced a 142.9 MB response; count=40000000 (and items=4000000 on a slot list) produced an out-of-memory crash of the worker from a single ~130-byte request. Both the plain v-for path (Vue's ssrRenderList) and the slot path (vforToArray) are affected.
Patches
Fixed in nuxt@4.5.1 and nuxt@3.21.10. Island/server-component v-for sources are now clamped to a maximum iteration count (MAXVFORLENGTH = 100000) at the render boundary, covering the plain path, the <slot v-for> element, and the vforToArray slot-props helper. Combined with the body-size cap (GHSA-9pgf-384g-p7mv), a single island render can no longer allocate without bound regardless of which v-for path is used or whether the prop arrives as an integer or an array.
Workarounds
Avoid v-for directly over an unclamped prop in server components, or clamp the count in the component (v-for="n in Math.min(count, 1000)"). A body-size limit in front of /nuxtisland/ only mitigates array-shaped inputs, not the integer-amplification case.
References
- Bound helper: packages/nuxt/src/app/components/vfor.ts - Transform: packages/nuxt/src/components/plugins/islands-transform.ts - Slot helper: packages/nuxt/src/app/components/utils.ts (vforToArray)
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/nuxtto a version that resolves this vulnerability.Fixed in 3.21.10 - Upgrade
Upgrade
npm/nuxtto a version that resolves this vulnerability.Fixed in 4.5.1 - Upgrade
Upgrade
nuxtto a version that resolves this vulnerability.Fixed in 4.5.1 - Upgrade
Upgrade
nuxtto a version that resolves this vulnerability.Fixed in 3.21.10 - Configuration
Ensure Nuxt clamps island/server-component v-for iteration length at the render boundary using MAX_VFOR_LENGTH = 100000 (covers the plain v-for path, the <slot v-for> element, and the vforToArray slot-props helper).
Nuxt island/server-component SSR v-for render boundary MAX_VFOR_LENGTH = 100000
Event History
Frequently Asked Questions
What is the severity of GHSA-hxcr-hm88-mpq6?
The severity of GHSA-hxcr-hm88-mpq6 is rated high, with a CVSS score of 7.5.
What is the impact of GHSA-hxcr-hm88-mpq6?
GHSA-hxcr-hm88-mpq6 allows an unauthenticated attacker to crash a Nuxt server that uses specific rendering patterns.
How do I fix GHSA-hxcr-hm88-mpq6?
To fix GHSA-hxcr-hm88-mpq6, you should update to the latest version of Nuxt that addresses this vulnerability.
Which software is affected by GHSA-hxcr-hm88-mpq6?
GHSA-hxcr-hm88-mpq6 affects the Nuxt framework in the npm ecosystem.
Can an authenticated user exploit GHSA-hxcr-hm88-mpq6?
No, an unauthenticated attacker can exploit GHSA-hxcr-hm88-mpq6, as no authentication is required to trigger the vulnerability.