CVE-2026-71318
Nuxt: Unauthorized Component Instantiation via Server Island Props
Nuxt is an open-source web development framework for Vue.js. From 3.1.0 until 3.21.10 and 4.5.1, an attacker can supply a top-level as prop to the /__nuxt_island/ endpoint and drive dynamic component resolution through <component :is>, resolveDynamicComponent, or h(). 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
- Low
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
4.8
Nuxt: Unauthorized Component Instantiation via Server Island Props
Nuxt is an open-source web development framework for Vue.js. From 3.1.0 until 3.21.10 and 4.5.1, an attacker can supply a top-level as prop to the /__nuxt_island/ endpoint and drive dynamic component resolution through <component :is>, resolveDynamicComponent, or h(). This issue is fixed in 3.21.10 and 4.5.1.
- Record
CVE-2026-71318- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-20
- Updated
- 2026-11-02
EUVDEUVD-2026-53647
4.8
Nuxt is an open-source web development framework for Vue.js. From 3.1.0 until 3.21.10 and 4.5.1, an attacker can supply a top-level as prop to the /__nuxt_island/ endpoint and drive dynamic component resolution through <component :is>, resolveDynamicComponent, or h(). This issue is fixed in 3.21.10 and 4.5.1.
- Record
EUVD-2026-53647- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-48hr-524c-v5w3
4.8
Nuxt: Unauthorized Component Instantiation via Server Island Props
Impact
Nuxt server islands accept props via the /__nuxt_island/ endpoint. When an application has a server island component that forwards props directly into Vue's dynamic component resolution (<component :is>, resolveDynamicComponent, or h()), an attacker can pass a plain string value (rather than a component definition) to instantiate any globally-registered Vue component or any native HTML element.
For example:
{ "as": "SomeGlobalComponent" }
...resolves and renders SomeGlobalComponent if it is globally registered, even though the attacker should only be able to drive props for the island's declared component. Similarly, { "as": "iframe" } renders an <iframe> element.
Unlike the primary RCE vector (GHSA-9473-5f9j-94wq), this does not require vue.runtimeCompiler to be enabled. A plain string prop is sufficient to trigger component resolution. The template/render key guard that addresses the RCE vector does not block plain string values.
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 inside a server island. Note this does not require explicit prop forwarding: island props the island component does not declare fall through as attributes onto its single root element, so an island whose root is a reka-ui / @nuxt/ui component receives the attacker's as value implicitly. Unlike the RCE vector, no vue.runtimeCompiler is required, which makes this vector reachable in more configurations. These libraries are not themselves vulnerable; they are noted only because they commonly provide the dynamic-component sink. Installing @nuxt/ui does not by itself register any component as a server island: the application must define the island (a .server.vue file).
Mitigating factors
- Exploitation requires a server island component that puts an attacker-controlled value onto a dynamic-component path (
<component :is>,resolveDynamicComponent,h(), or a polymorphicas/asChildprop), either explicitly or via attribute fallthrough when the island's root is such a component. - Reachable components are limited to what is actually in the island app's global registry. In a default pages-enabled app that is
RouterViewandRouterLink(both registered globally by the pages router plugin, which runs even in component islands), plus anycomponents/global/component and any component a module registers globally.RouterLinkin particular renders an attacker-influenced<a>(and, because an island that declares no props forwards all props,toand otherRouterLinkprops ride the same fallthrough). Vue built-ins (Transition,KeepAlive,Teleport,Suspense) and Nuxt auto-imports (ClientOnly,NuxtLink,NuxtPage, etc.) are NOT in the island app's global registry and cannot be resolved this way; an unresolved name instead renders as a native HTML element (the element-injection half of this issue). - Declaring the props an island accepts, or setting
inheritAttrs: falseon it, prevents an undeclaredasfrom falling through to a polymorphic root and neutralizes this vector. - Arbitrary JavaScript execution is not possible through this vector (no
template/rendercompilation). - Island component names are constrained to the build-time component registry; an attacker cannot resolve arbitrary components.
Affected versions
Nuxt >=3.1.0 <3.21.10 and >=4.0.0 <4.5.1, with component islands active. The island prop-forwarding behavior has existed since server islands were introduced in v3.1.0, and this vector does not depend on vue.runtimeCompiler. Nuxt 2 is not affected.
Note the patch (below) closes the implicit attribute-fallthrough path, which is the majority case. An island that explicitly forwards an untrusted prop into dynamic component resolution…
- Record
GHSA-48hr-524c-v5w3- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-20
- Updated
- 2026-11-02
NVD
4.8
Nuxt is an open-source web development framework for Vue.js. From 3.1.0 until 3.21.10 and 4.5.1, an attacker can supply a top-level as prop to the /__nuxt_island/ endpoint and drive dynamic component resolution through <component :is>, resolveDynamicComponent, or h(). This issue is fixed in 3.21.10 and 4.5.1.
- Record
CVE-2026-71318- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-20
- Updated
- 2026-11-02
OSV
4.8
Nuxt: Unauthorized Component Instantiation via Server Island Props
Nuxt is an open-source web development framework for Vue.js. From 3.1.0 until 3.21.10 and 4.5.1, an attacker can supply a top-level as prop to the /__nuxt_island/ endpoint and drive dynamic component resolution through <component :is>, resolveDynamicComponent, or h(). This issue is fixed in 3.21.10 and 4.5.1.
- Record
CVE-2026-71318- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-20
- Updated
- 2026-11-02
OSVGHSA-48hr-524c-v5w3
4.8
Nuxt: Unauthorized Component Instantiation via Server Island Props
Impact
Nuxt server islands accept props via the /__nuxt_island/ endpoint. When an application has a server island component that forwards props directly into Vue's dynamic component resolution (<component :is>, resolveDynamicComponent, or h()), an attacker can pass a plain string value (rather than a component definition) to instantiate any globally-registered Vue component or any native HTML element.
For example:
{ "as": "SomeGlobalComponent" }
...resolves and renders SomeGlobalComponent if it is globally registered, even though the attacker should only be able to drive props for the island's declared component. Similarly, { "as": "iframe" } renders an <iframe> element.
Unlike the primary RCE vector (GHSA-9473-5f9j-94wq), this does not require vue.runtimeCompiler to be enabled. A plain string prop is sufficient to trigger component resolution. The template/render key guard that addresses the RCE vector does not block plain string values.
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 inside a server island. Note this does not require explicit prop forwarding: island props the island component does not declare fall through as attributes onto its single root element, so an island whose root is a reka-ui / @nuxt/ui component receives the attacker's as value implicitly. Unlike the RCE vector, no vue.runtimeCompiler is required, which makes this vector reachable in more configurations. These libraries are not themselves vulnerable; they are noted only because they commonly provide the dynamic-component sink. Installing @nuxt/ui does not by itself register any component as a server island: the application must define the island (a .server.vue file).
Mitigating factors
- Exploitation requires a server island component that puts an attacker-controlled value onto a dynamic-component path (
<component :is>,resolveDynamicComponent,h(), or a polymorphicas/asChildprop), either explicitly or via attribute fallthrough when the island's root is such a component. - Reachable components are limited to what is actually in the island app's global registry. In a default pages-enabled app that is
RouterViewandRouterLink(both registered globally by the pages router plugin, which runs even in component islands), plus anycomponents/global/component and any component a module registers globally.RouterLinkin particular renders an attacker-influenced<a>(and, because an island that declares no props forwards all props,toand otherRouterLinkprops ride the same fallthrough). Vue built-ins (Transition,KeepAlive,Teleport,Suspense) and Nuxt auto-imports (ClientOnly,NuxtLink,NuxtPage, etc.) are NOT in the island app's global registry and cannot be resolved this way; an unresolved name instead renders as a native HTML element (the element-injection half of this issue). - Declaring the props an island accepts, or setting
inheritAttrs: falseon it, prevents an undeclaredasfrom falling through to a polymorphic root and neutralizes this vector. - Arbitrary JavaScript execution is not possible through this vector (no
template/rendercompilation). - Island component names are constrained to the build-time component registry; an attacker cannot resolve arbitrary components.
Affected versions
Nuxt >=3.1.0 <3.21.10 and >=4.0.0 <4.5.1, with component islands active. The island prop-forwarding behavior has existed since server islands were introduced in v3.1.0, and this vector does not depend on vue.runtimeCompiler. Nuxt 2 is not affected.
Note the patch (below) closes the implicit attribute-fallthrough path, which is the majority case. An island that explicitly forwards an untrusted prop into dynamic component resolution…
- Record
GHSA-48hr-524c-v5w3- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-20
- 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.1.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-71318 is a medium vulnerability (CVSS 4.8) 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.32%, the 24th percentile. Fixed in nuxt 4.5.1.
References
github.com/nuxt/nuxt/security/advisories/GHSA-48hr-524c-v5w3
github.com/nuxt/nuxt/releases/tag/v3.21.10
github.com/nuxt/nuxt/releases/tag/v4.5.1
github.com/advisories/GHSA-48hr-524c-v5w3
github.com/CVEProject/cvelistV5/tree/main/cves/2026/71xxx/CVE-2026-71318.json
nvd.nist.gov/vuln/detail/CVE-2026-71318
github.com/nuxt/nuxt
Left out here: the rest of 2 source descriptions. The JSON record has them.