CVE-2026-71320
Nuxt: Server-Side Remote Code Execution via Runtime Template Injection in Nuxt Server Island Props
Nuxt is an open-source web development framework for Vue.js. From 3.4.0 until 3.21.10 and 4.5.1, an attacker can inject a template key through /__nuxt_island/ props into a dynamic component when vue.runtimeCompiler: true is enabled, causing template execution in the Nitro process. This issue is fixed in 3.21.10 and 4.5.1.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.1
Nuxt: Server-Side Remote Code Execution via Runtime Template Injection in Nuxt Server Island Props
Nuxt is an open-source web development framework for Vue.js. From 3.4.0 until 3.21.10 and 4.5.1, an attacker can inject a template key through /__nuxt_island/ props into a dynamic component when vue.runtimeCompiler: true is enabled, causing template execution in the Nitro process. This issue is fixed in 3.21.10 and 4.5.1.
- Record
CVE-2026-71320- CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-74, CWE-94
- Updated
- 2026-11-02
EUVDEUVD-2026-53649
8.1
Nuxt is an open-source web development framework for Vue.js. From 3.4.0 until 3.21.10 and 4.5.1, an attacker can inject a template key through /__nuxt_island/ props into a dynamic component when vue.runtimeCompiler: true is enabled, causing template execution in the Nitro process. This issue is fixed in 3.21.10 and 4.5.1.
- Record
EUVD-2026-53649- CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-9473-5f9j-94wq
8.1
Nuxt: Server-Side Remote Code Execution via Runtime Template Injection in Nuxt Server Island Props
Impact
Nuxt server islands accept props via the /__nuxt_island/ endpoint. When vue.runtimeCompiler: true is enabled (off by default) and the application has a server island component that forwards props into Vue's dynamic component resolution (<component :is>, resolveDynamicComponent, or h()), an attacker can inject a template key into the island props to achieve server-side remote code execution in the Nitro process.
{ "as": { "template": "<attacker-controlled>" } }
Vue's runtime template compiler compiles and executes the attacker-controlled template in the server process. The same primitive also works on the client side when the runtime compiler is active there, though the server-side path is the primary concern.
Some component libraries expose a polymorphic as / asChild prop that forwards its value into <component :is>; @nuxt/ui (via reka-ui) is a widely used example. An application is affected if such a component receives the attacker-controlled value, provided vue.runtimeCompiler is also enabled. Note this does not require the island author to explicitly forward a prop: island props that the island component does not declare fall through as attributes onto its single root element (standard Vue attribute inheritance), so an island whose root is a polymorphic component receives the attacker's as value implicitly. These libraries are not themselves vulnerable; they are noted only because they commonly provide the dynamic-component sink.
Common configurations that satisfy the preconditions
The flaw is in Nuxt core. The library below is not itself vulnerable; it is noted because it commonly provides the dynamic-component sink an application might inadvertently expose.
-
@nuxt/ui(via its underlyingreka-uiprimitives) exposes a polymorphicas/asChildprop that is forwarded into Vue's dynamic-component resolution. Installing@nuxt/uidoes not by itself register any component as a server island. Exploitation requires the application to define an island component (a.server.vuefile) whose rendered output puts the attacker-controlled value on such a component'sas/asChildprop; withvue.runtimeCompiler: true, the attacker-controlledtemplateis then compiled and executed. Because undeclared island props fall through as attributes to the single root, this can happen without any explicit binding: an island whose root is areka-ui/@nuxt/uicomponent is enough. An example vulnerable island (theasvalue falls through toUButton, no explicit forwarding needed):<!-- components/MyWidget.server.vue --> <template> <UButton>Save</UButton> </template>
The island URL hash (/__nuxt_island/<Name>_<hash>.json) is a deterministic (unsalted) content hash, not an authentication token. It provides integrity relative to the URL but is not a security boundary: an attacker who knows the component name and desired props can compute a valid hash.
Mitigating factors
vue.runtimeCompileris off by default in Nuxt. The vast majority of Nuxt applications are not affected.- Exploitation requires a second precondition: the application must have a server island component that puts an attacker-controlled value onto a dynamic-component path (
<component :is>,resolveDynamicComponent,h(), or a polymorphicas/asChildprop). This can occur explicitly or via attribute fallthrough when the island's root is such a component. - SSG / static deployments are largely unreachable via this vector (no server process to exploit).
- Island component names are constrained to the build-time component registry; an attacker cannot resolve arbitrary components.
Affected versions
Nuxt >=3.4.0 <3.21.10 and >=4.0.0 <4.5.1, and only when vue.runtimeCompiler: true and component islands are active. Earlier versions did not allow the Vue compiler to be enabled in the server bundle (the compiler dependencies have been…
- Record
GHSA-9473-5f9j-94wq- CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-74, CWE-94
- Updated
- 2026-11-02
NVD
8.1
Nuxt is an open-source web development framework for Vue.js. From 3.4.0 until 3.21.10 and 4.5.1, an attacker can inject a template key through /__nuxt_island/ props into a dynamic component when vue.runtimeCompiler: true is enabled, causing template execution in the Nitro process. This issue is fixed in 3.21.10 and 4.5.1.
- Record
CVE-2026-71320- CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-74, CWE-94
- Updated
- 2026-11-02
OSV
8.1
Nuxt: Server-Side Remote Code Execution via Runtime Template Injection in Nuxt Server Island Props
Nuxt is an open-source web development framework for Vue.js. From 3.4.0 until 3.21.10 and 4.5.1, an attacker can inject a template key through /__nuxt_island/ props into a dynamic component when vue.runtimeCompiler: true is enabled, causing template execution in the Nitro process. This issue is fixed in 3.21.10 and 4.5.1.
- Record
CVE-2026-71320- CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-74, CWE-94
- Updated
- 2026-11-02
OSVGHSA-9473-5f9j-94wq
8.1
Nuxt: Server-Side Remote Code Execution via Runtime Template Injection in Nuxt Server Island Props
Impact
Nuxt server islands accept props via the /__nuxt_island/ endpoint. When vue.runtimeCompiler: true is enabled (off by default) and the application has a server island component that forwards props into Vue's dynamic component resolution (<component :is>, resolveDynamicComponent, or h()), an attacker can inject a template key into the island props to achieve server-side remote code execution in the Nitro process.
{ "as": { "template": "<attacker-controlled>" } }
Vue's runtime template compiler compiles and executes the attacker-controlled template in the server process. The same primitive also works on the client side when the runtime compiler is active there, though the server-side path is the primary concern.
Some component libraries expose a polymorphic as / asChild prop that forwards its value into <component :is>; @nuxt/ui (via reka-ui) is a widely used example. An application is affected if such a component receives the attacker-controlled value, provided vue.runtimeCompiler is also enabled. Note this does not require the island author to explicitly forward a prop: island props that the island component does not declare fall through as attributes onto its single root element (standard Vue attribute inheritance), so an island whose root is a polymorphic component receives the attacker's as value implicitly. These libraries are not themselves vulnerable; they are noted only because they commonly provide the dynamic-component sink.
Common configurations that satisfy the preconditions
The flaw is in Nuxt core. The library below is not itself vulnerable; it is noted because it commonly provides the dynamic-component sink an application might inadvertently expose.
-
@nuxt/ui(via its underlyingreka-uiprimitives) exposes a polymorphicas/asChildprop that is forwarded into Vue's dynamic-component resolution. Installing@nuxt/uidoes not by itself register any component as a server island. Exploitation requires the application to define an island component (a.server.vuefile) whose rendered output puts the attacker-controlled value on such a component'sas/asChildprop; withvue.runtimeCompiler: true, the attacker-controlledtemplateis then compiled and executed. Because undeclared island props fall through as attributes to the single root, this can happen without any explicit binding: an island whose root is areka-ui/@nuxt/uicomponent is enough. An example vulnerable island (theasvalue falls through toUButton, no explicit forwarding needed):<!-- components/MyWidget.server.vue --> <template> <UButton>Save</UButton> </template>
The island URL hash (/__nuxt_island/<Name>_<hash>.json) is a deterministic (unsalted) content hash, not an authentication token. It provides integrity relative to the URL but is not a security boundary: an attacker who knows the component name and desired props can compute a valid hash.
Mitigating factors
vue.runtimeCompileris off by default in Nuxt. The vast majority of Nuxt applications are not affected.- Exploitation requires a second precondition: the application must have a server island component that puts an attacker-controlled value onto a dynamic-component path (
<component :is>,resolveDynamicComponent,h(), or a polymorphicas/asChildprop). This can occur explicitly or via attribute fallthrough when the island's root is such a component. - SSG / static deployments are largely unreachable via this vector (no server process to exploit).
- Island component names are constrained to the build-time component registry; an attacker cannot resolve arbitrary components.
Affected versions
Nuxt >=3.4.0 <3.21.10 and >=4.0.0 <4.5.1, and only when vue.runtimeCompiler: true and component islands are active. Earlier versions did not allow the Vue compiler to be enabled in the server bundle (the compiler dependencies have been…
- Record
GHSA-9473-5f9j-94wq- CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-74, CWE-94
- Updated
- 2026-11-02
Show 11 moreShow less
OSVCLSA-2026-1788450984 No score
TuxCare security update for nuxt (11 CVEs)
TuxCare rebuilt nuxt to address 11 CVEs. Fixed in 3.12.4-tuxcare.12.
- Record
CLSA-2026-1788450984- Updated
- 2026-11-02
OSVCLSA-2026-1789598338 No score
TuxCare security update for nuxt (7 CVEs)
TuxCare rebuilt nuxt to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.
- Record
CLSA-2026-1789598338- Updated
- 2026-11-02
OSVCLSA-2026-1792161460 No score
TuxCare security update for @nuxt/kit (11 CVEs)
TuxCare rebuilt @nuxt/kit to address 11 CVEs. Fixed in 3.12.4-tuxcare.12.
- Record
CLSA-2026-1792161460- Updated
- 2026-11-02
OSVCLSA-2026-1792161463 No score
TuxCare security update for @nuxt/kit (7 CVEs)
TuxCare rebuilt @nuxt/kit to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.
- Record
CLSA-2026-1792161463- Updated
- 2026-11-02
OSVCLSA-2026-1792161485 No score
TuxCare security update for @nuxt/rspack-builder (7 CVEs)
TuxCare rebuilt @nuxt/rspack-builder to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.
- Record
CLSA-2026-1792161485- Updated
- 2026-11-02
OSVCLSA-2026-1792161601 No score
TuxCare security update for @nuxt/schema (11 CVEs)
TuxCare rebuilt @nuxt/schema to address 11 CVEs. Fixed in 3.12.4-tuxcare.12.
- Record
CLSA-2026-1792161601- Updated
- 2026-11-02
OSVCLSA-2026-1792161604 No score
TuxCare security update for @nuxt/schema (7 CVEs)
TuxCare rebuilt @nuxt/schema to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.
- Record
CLSA-2026-1792161604- Updated
- 2026-11-02
OSVCLSA-2026-1792161823 No score
TuxCare security update for @nuxt/vite-builder (11 CVEs)
TuxCare rebuilt @nuxt/vite-builder to address 11 CVEs. Fixed in 3.12.4-tuxcare.12.
- Record
CLSA-2026-1792161823- Updated
- 2026-11-02
OSVCLSA-2026-1792161826 No score
TuxCare security update for @nuxt/vite-builder (7 CVEs)
TuxCare rebuilt @nuxt/vite-builder to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.
- Record
CLSA-2026-1792161826- Updated
- 2026-11-02
OSVCLSA-2026-1792161936 No score
TuxCare security update for @nuxt/webpack-builder (11 CVEs)
TuxCare rebuilt @nuxt/webpack-builder to address 11 CVEs. Fixed in 3.12.4-tuxcare.12.
- Record
CLSA-2026-1792161936- Updated
- 2026-11-02
OSVCLSA-2026-1792161939 No score
TuxCare security update for @nuxt/webpack-builder (7 CVEs)
TuxCare rebuilt @nuxt/webpack-builder to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.
- Record
CLSA-2026-1792161939- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
nuxtnpm |
4.0.0 up to 4.5.1 | 4.5.1 |
nuxtnpm |
3.4.0 up to 3.21.10 | 3.21.10 |
nuxtTuxCare:npm From an advisory covering 11 CVEs |
3.12.4-tuxcare.0 up to 3.12.4-tuxcare.12, plus listed versions 3.12.43.12.4-tuxcare.103.12.4-tuxcare.113.12.4-tuxcare.23.12.4-tuxcare.3 Show 6 moreShow less3.12.4-tuxcare.43.12.4-tuxcare.53.12.4-tuxcare.63.12.4-tuxcare.73.12.4-tuxcare.83.12.4-tuxcare.9 |
3.12.4-tuxcare.12 |
nuxtTuxCare:npm From an advisory covering 7 CVEs |
4.0.3-tuxcare.0 up to 4.0.3-tuxcare.7, plus listed versions 4.0.34.0.3-tuxcare.14.0.3-tuxcare.24.0.3-tuxcare.34.0.3-tuxcare.44.0.3-tuxcare.54.0.3-tuxcare.6 |
4.0.3-tuxcare.7 |
@nuxt/kitTuxCare:npm From an advisory covering 11 CVEs |
3.12.4-tuxcare.0 up to 3.12.4-tuxcare.12, plus listed versions 3.12.43.12.4-tuxcare.113.12.4-tuxcare.23.12.4-tuxcare.33.12.4-tuxcare.63.12.4-tuxcare.73.12.4-tuxcare.83.12.4-tuxcare.9 |
3.12.4-tuxcare.12 |
@nuxt/kitTuxCare:npm From an advisory covering 7 CVEs |
4.0.3-tuxcare.0 up to 4.0.3-tuxcare.7, plus listed versions 4.0.34.0.3-tuxcare.14.0.3-tuxcare.34.0.3-tuxcare.44.0.3-tuxcare.5 |
4.0.3-tuxcare.7 |
@nuxt/rspack-builderTuxCare:npm From an advisory covering 7 CVEs |
4.0.3-tuxcare.0 up to 4.0.3-tuxcare.7, plus listed versions 4.0.34.0.3-tuxcare.14.0.3-tuxcare.34.0.3-tuxcare.44.0.3-tuxcare.5 |
4.0.3-tuxcare.7 |
@nuxt/schemaTuxCare:npm From an advisory covering 11 CVEs |
3.12.4-tuxcare.0 up to 3.12.4-tuxcare.12, plus listed versions 3.12.43.12.4-tuxcare.103.12.4-tuxcare.113.12.4-tuxcare.23.12.4-tuxcare.3 Show 4 moreShow less3.12.4-tuxcare.63.12.4-tuxcare.73.12.4-tuxcare.83.12.4-tuxcare.9 |
3.12.4-tuxcare.12 |
@nuxt/schemaTuxCare:npm From an advisory covering 7 CVEs |
4.0.3-tuxcare.0 up to 4.0.3-tuxcare.7, plus listed versions 4.0.34.0.3-tuxcare.14.0.3-tuxcare.34.0.3-tuxcare.44.0.3-tuxcare.54.0.3-tuxcare.6 |
4.0.3-tuxcare.7 |
@nuxt/vite-builderTuxCare:npm From an advisory covering 11 CVEs |
3.12.4-tuxcare.0 up to 3.12.4-tuxcare.12, plus listed versions 3.12.43.12.4-tuxcare.103.12.4-tuxcare.113.12.4-tuxcare.23.12.4-tuxcare.3 Show 4 moreShow less3.12.4-tuxcare.63.12.4-tuxcare.73.12.4-tuxcare.83.12.4-tuxcare.9 |
3.12.4-tuxcare.12 |
@nuxt/vite-builderTuxCare:npm From an advisory covering 7 CVEs |
4.0.3-tuxcare.0 up to 4.0.3-tuxcare.7, plus listed versions 4.0.34.0.3-tuxcare.14.0.3-tuxcare.34.0.3-tuxcare.44.0.3-tuxcare.54.0.3-tuxcare.6 |
4.0.3-tuxcare.7 |
@nuxt/webpack-builderTuxCare:npm From an advisory covering 11 CVEs |
3.12.4-tuxcare.0 up to 3.12.4-tuxcare.12, plus listed versions 3.12.43.12.4-tuxcare.113.12.4-tuxcare.23.12.4-tuxcare.33.12.4-tuxcare.4 Show 5 moreShow less3.12.4-tuxcare.53.12.4-tuxcare.63.12.4-tuxcare.73.12.4-tuxcare.83.12.4-tuxcare.9 |
3.12.4-tuxcare.12 |
@nuxt/webpack-builderTuxCare:npm From an advisory covering 7 CVEs |
4.0.3-tuxcare.0 up to 4.0.3-tuxcare.7, plus listed versions 4.0.34.0.3-tuxcare.14.0.3-tuxcare.34.0.3-tuxcare.44.0.3-tuxcare.5 |
4.0.3-tuxcare.7 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-71320 is a high vulnerability (CVSS 8.1) in @clerk Nuxt, published August 5, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.71%, the 53rd percentile. Fixed in nuxt 4.5.1.
References
github.com/nuxt/nuxt/security/advisories/GHSA-9473-5f9j-94wq
github.com/nuxt/nuxt/commit/5b60017f7f1d5e9384cadf1d6c580b99d583c418
github.com/nuxt/nuxt/commit/ee6c846338f4eb75801815dda86df1f494725859
github.com/nuxt/nuxt/releases/tag/v3.21.10
github.com/nuxt/nuxt/releases/tag/v4.5.1
github.com/advisories/GHSA-9473-5f9j-94wq
github.com/CVEProject/cvelistV5/tree/main/cves/2026/71xxx/CVE-2026-71320.json
nvd.nist.gov/vuln/detail/CVE-2026-71320
github.com/nuxt/nuxt
Left out here: the rest of 2 source descriptions. The JSON record has them.