Summary
CVE-2026-71320 is a server-side remote code execution vulnerability in the Server Island feature of Nuxt. Attacker-controlled island props are forwarded to Vue’s runtime compiler, allowing injected template code to execute within the Nitro server process. It affects Nuxt 3.4.0–3.21.9 and 4.0.0–4.5.0 and is rated High (CVSS 8.1).
Technical details
- Root cause: Island component props are insufficiently validated before being forwarded to Vue’s dynamic component resolution, letting an attacker inject a
template(orrender) key containing executable code that Vue’s runtime compiler then executes on the server. - Trigger conditions (all required):
vue.runtimeCompiler: trueis configured (off by default); the application exposes a.server.vuecomponent that forwards attacker-controlled props into<component :is>,resolveDynamicComponent(),h(), or polymorphicas/asChildprops; and the attacker submits crafted props to the/__nuxt_island/endpoint. - Attack vector: Network, no authentication or user interaction required; high attack complexity due to the required non-default configuration.
- Impact: Execution of attacker-supplied template code within the Nitro process, compromising confidentiality, integrity, and availability.
Affected software
- Nuxt 3.4.0 through 3.21.9
- Nuxt 4.0.0 through 4.5.0
- Earlier versions are unaffected due to compiler dependency mocking on the server.
Severity
- CVSS v3.1 base score: 8.1 (High)
- Vector:
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Mitigation and recommended actions
- Immediate: Upgrade to Nuxt 3.21.10 or 4.5.1.
- If no patch can be applied:
- Ensure
vue.runtimeCompilerremainsfalse(its default value). - Avoid forwarding island props into dynamic component paths without sanitization.
- Deploy WAF rules blocking requests containing
templateorrenderkeys in decoded/__nuxt_island/props. Note that WAF filtering does not cover initial server-side rendering paths.
- Ensure
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

