Nuxtにクロスサイトスクリプティング(XSS)の脆弱性(CVE-2026-114133)
概要
Nuxtにクロスサイトスクリプティング(XSS)の脆弱性が確認されました。
バージョン 3.13.0 以上 4.6.2 未満に影響があります。
修正版 4.6.2 への更新が推奨されます。
脆弱性の基本情報
| 脆弱性ID |
CVE-2026-114133 GHSA-xfq5-w38q-pc2x |
|---|---|
| 脆弱性の種類 | クロスサイトスクリプティング(XSS) |
| 危険度 | 中 |
| CVSSスコア |
5.4(CVSS v3.1) CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N |
| 公開日 | 2026年10月21日 |
| 更新日 | 2026年10月22日 |
影響を受ける製品
| 製品 | 影響を受けるバージョン | 修正版 | 出典 |
|---|---|---|---|
| Nuxt |
3.13.0 以上 4.6.2 未満 | 4.6.2 | OSV.dev |
推奨対応
- Nuxtを修正版 4.6.2 またはそれ以降の公式最新版へ更新してください。
情報元の原文
OSV.dev
Nuxt server islands render `useHeadSafe` input without sanitisation
## Impact
`useHeadSafe` restricts head input to an allowlist of safe tags and attributes. For example, `bodyAttrs` is limited to `class` and `style`, event handler attributes are removed, and `<script>` tags are only kept for JSON types.
When `useHeadSafe` is called inside a server island (a `.server.vue` component or page, or a component rendered with `<NuxtIsland>`), the island renderer serialises the raw input of every head entry into the island response without the option that marks it as safe input. `<NuxtIsland>` then pushes that input into the page's head as a regular entry, both during server rendering and when hydrating or refetching on the client.
As a result, input that `useHeadSafe` would normally strip (such as `bodyAttrs.onload` or executable `<script>` content) is rendered into the page. If an application passes user-controlled data to `useHeadSafe` inside a server island, an attacker who controls that data can achieve stored cross-site scripting on the application's origin.
```vue
<!-- components/AuthorMeta.server.vue -->
<script setup lang="ts">
const { data: author } = await useFetch('/api/author')
// author.value.head is user-authored, e.g. { bodyAttrs: { onload: '...' } }
useHeadSafe(author.value.head)
</script>
```
## Mitigating factors
- Server components are experimental. They are only active when the application defines a `.server.vue` component or page, or enables `experimental.componentIslands` and renders `<NuxtIsland>`.
- Exploitation requires the application to pass attacker-controlled data to `useHeadSafe` inside a server island. `useHeadSafe` called from regular (non-island) components and pages is not affected.
## Affected versions
`nuxt` `>=3.13.0`, when head support for server islands was introduced. Nuxt 2 is not affected.
## Patches
Fixed in `nuxt@4.6.2`. Nuxt 3 reached end of life on 31 July 2026 and will not receive a fix.
Patched releases apply Unhead's safe input filtering to `useHeadSafe` entries on the server before they are added to the island response, so `islandResponse.head` (including what `render:island` hooks see) only contains input that `useHeadSafe` allows.
## Workarounds
Upgrade to `nuxt@4.6.2`. If you cannot upgrade, including on Nuxt 3:
1. Call `useHeadSafe` with untrusted input from a regular component or page rather than from inside a server island.
2. Alternatively, validate untrusted head input against your own allowlist before passing it to `useHeadSafe` inside a server island.
利用条件:CC BY 4.0
出典: GitHub Advisory Database(OSV.dev 経由で取得)。原文のまま掲載(改変なし)
CVE List(CVE Program)
Nuxt server islands render `useHeadSafe` input without sanitisation
Nuxt is an open-source web development framework for Vue.js. From 3.13.0 until 4.6.2, the server-island renderer serializes raw useHeadSafe entry input into the island response without preserving the safe-input marker, and NuxtIsland later inserts that input into the page head as an ordinary entry. An application that passes attacker-controlled data to useHeadSafe in a .server.vue component or page, or in a component rendered through NuxtIsland, can therefore render values normally removed by the allowlist, including event-handler attributes or executable script content, resulting in stored cross-site scripting in the application origin. This issue is fixed in version 4.6.2 .
利用条件:CVE の利用条件(CVE Terms of Use)・原文のまま掲載
Copyright 1999-2026 The MITRE Corporation
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy.
情報元
- OSV.dev
https://github.com/advisories/GHSA-xfq5-w38q-pc2x - CVE List(CVE Program)
https://www.cve.org/CVERecord?id=CVE-2026-114133