{"id":"CVE-2026-56317","aliases":["CLSA-2026-1788286444","CLSA-2026-1788337370","CLSA-2026-1788355153","CLSA-2026-1788450984","CLSA-2026-1788522007","CLSA-2026-1788960197","CLSA-2026-1789598338","CLSA-2026-1792161458","CLSA-2026-1792161460","CLSA-2026-1792161461","CLSA-2026-1792161463","CLSA-2026-1792161485","CLSA-2026-1792161599","CLSA-2026-1792161601","CLSA-2026-1792161602","CLSA-2026-1792161604","CLSA-2026-1792161821","CLSA-2026-1792161823","CLSA-2026-1792161824","CLSA-2026-1792161826","CLSA-2026-1792161934","CLSA-2026-1792161936","CLSA-2026-1792161937","CLSA-2026-1792161939","CLSA-2026-1792163457","CLSA-2026-1793661075","EUVD-2026-38112","GHSA-m3q2-p4fw-w38m","GHSA-xppm-jmw6-fhmf"],"status":"published","title":"Nuxt - Cross-Site Scripting via NoScript Component Slot Content","description":"Nuxt before 4.4.7 (and the 3.x branch before 3.21.7) contains a cross-site scripting vulnerability in the NoScript component that writes slot content to innerHTML without escaping. Attackers can inject malicious scripts through untrusted data in NoScript slots, such as route.query parameters, which execute in the document context when the noscript tag is implicitly closed by script tags.","severity":{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"low","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00342,"percentile":0.28035,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-79"],"published":"2026-06-16T23:38:47Z","modified":"2026-11-03T02:45:02Z","fixes":[{"ecosystem":"npm","package":"nuxt","fixed_in":["4.4.7","3.21.7"],"sources":["ghsa","osv"]},{"ecosystem":"TuxCare:npm","package":"nuxt","fixed_in":["1.4.5-tuxcare.5","3.12.3-tuxcare.8","2.18.1-tuxcare.5"],"sources":["osv"]},{"ecosystem":"TuxCare:npm","package":"@nuxt/kit","fixed_in":["3.12.3-tuxcare.8"],"sources":["osv"]},{"ecosystem":"TuxCare:npm","package":"@nuxt/schema","fixed_in":["3.12.3-tuxcare.8"],"sources":["osv"]},{"ecosystem":"TuxCare:npm","package":"@nuxt/vite-builder","fixed_in":["3.12.3-tuxcare.8"],"sources":["osv"]},{"ecosystem":"TuxCare:npm","package":"@nuxt/webpack-builder","fixed_in":["3.12.3-tuxcare.8"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.0.0"},{"fixed":"4.4.7"}]}]},{"source":"ghsa","ecosystem":"npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.21.7"}]}]},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0.10.7-tuxcare.0"},{"fixed":"0.10.7-tuxcare.4"}]}],"versions":["0.10.7","0.10.7-tuxcare.1","0.10.7-tuxcare.2","0.10.7-tuxcare.3"],"bundled":2},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.4.5-tuxcare.0"},{"fixed":"1.4.5-tuxcare.5"}]}],"versions":["1.4.5","1.4.5-tuxcare.1","1.4.5-tuxcare.2","1.4.5-tuxcare.3","1.4.5-tuxcare.4"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.2.0-tuxcare.0"},{"fixed":"3.2.0-tuxcare.5"}]}],"versions":["3.2.0","3.2.0-tuxcare.1","3.2.0-tuxcare.2","3.2.0-tuxcare.3","3.2.0-tuxcare.4"],"bundled":3},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.4-tuxcare.0"},{"fixed":"3.12.4-tuxcare.12"}]}],"versions":["3.12.4","3.12.4-tuxcare.10","3.12.4-tuxcare.11","3.12.4-tuxcare.2","3.12.4-tuxcare.3","3.12.4-tuxcare.4","3.12.4-tuxcare.5","3.12.4-tuxcare.6","3.12.4-tuxcare.7","3.12.4-tuxcare.8","3.12.4-tuxcare.9"],"bundled":11},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.3-tuxcare.0"},{"fixed":"3.12.3-tuxcare.8"}]}],"versions":["3.12.3","3.12.3-tuxcare.1","3.12.3-tuxcare.2","3.12.3-tuxcare.3","3.12.3-tuxcare.4","3.12.3-tuxcare.5","3.12.3-tuxcare.6","3.12.3-tuxcare.7"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.18.1-tuxcare.0"},{"fixed":"2.18.1-tuxcare.5"}]}],"versions":["2.18.1","2.18.1-tuxcare.1","2.18.1-tuxcare.2","2.18.1-tuxcare.3","2.18.1-tuxcare.4"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.0.3-tuxcare.0"},{"fixed":"4.0.3-tuxcare.7"}]}],"versions":["4.0.3","4.0.3-tuxcare.1","4.0.3-tuxcare.2","4.0.3-tuxcare.3","4.0.3-tuxcare.4","4.0.3-tuxcare.5","4.0.3-tuxcare.6"],"bundled":7},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/kit","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.2.0-tuxcare.0"},{"fixed":"3.2.0-tuxcare.5"}]}],"versions":["3.2.0","3.2.0-tuxcare.2","3.2.0-tuxcare.4"],"bundled":3},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/kit","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.4-tuxcare.0"},{"fixed":"3.12.4-tuxcare.12"}]}],"versions":["3.12.4","3.12.4-tuxcare.11","3.12.4-tuxcare.2","3.12.4-tuxcare.3","3.12.4-tuxcare.6","3.12.4-tuxcare.7","3.12.4-tuxcare.8","3.12.4-tuxcare.9"],"bundled":11},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/kit","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.3-tuxcare.0"},{"fixed":"3.12.3-tuxcare.8"}]}],"versions":["3.12.3","3.12.3-tuxcare.1","3.12.3-tuxcare.3","3.12.3-tuxcare.4","3.12.3-tuxcare.5","3.12.3-tuxcare.6"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/kit","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.0.3-tuxcare.0"},{"fixed":"4.0.3-tuxcare.7"}]}],"versions":["4.0.3","4.0.3-tuxcare.1","4.0.3-tuxcare.3","4.0.3-tuxcare.4","4.0.3-tuxcare.5"],"bundled":7},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/rspack-builder","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.0.3-tuxcare.0"},{"fixed":"4.0.3-tuxcare.7"}]}],"versions":["4.0.3","4.0.3-tuxcare.1","4.0.3-tuxcare.3","4.0.3-tuxcare.4","4.0.3-tuxcare.5"],"bundled":7},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/schema","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.2.0-tuxcare.0"},{"fixed":"3.2.0-tuxcare.5"}]}],"versions":["3.2.0","3.2.0-tuxcare.2","3.2.0-tuxcare.4"],"bundled":3},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/schema","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.4-tuxcare.0"},{"fixed":"3.12.4-tuxcare.12"}]}],"versions":["3.12.4","3.12.4-tuxcare.10","3.12.4-tuxcare.11","3.12.4-tuxcare.2","3.12.4-tuxcare.3","3.12.4-tuxcare.6","3.12.4-tuxcare.7","3.12.4-tuxcare.8","3.12.4-tuxcare.9"],"bundled":11},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/schema","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.3-tuxcare.0"},{"fixed":"3.12.3-tuxcare.8"}]}],"versions":["3.12.3","3.12.3-tuxcare.1","3.12.3-tuxcare.3","3.12.3-tuxcare.4","3.12.3-tuxcare.5","3.12.3-tuxcare.6"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/schema","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.0.3-tuxcare.0"},{"fixed":"4.0.3-tuxcare.7"}]}],"versions":["4.0.3","4.0.3-tuxcare.1","4.0.3-tuxcare.3","4.0.3-tuxcare.4","4.0.3-tuxcare.5","4.0.3-tuxcare.6"],"bundled":7},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/vite-builder","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.2.0-tuxcare.0"},{"fixed":"3.2.0-tuxcare.5"}]}],"versions":["3.2.0","3.2.0-tuxcare.2","3.2.0-tuxcare.4"],"bundled":3},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/vite-builder","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.4-tuxcare.0"},{"fixed":"3.12.4-tuxcare.12"}]}],"versions":["3.12.4","3.12.4-tuxcare.10","3.12.4-tuxcare.11","3.12.4-tuxcare.2","3.12.4-tuxcare.3","3.12.4-tuxcare.6","3.12.4-tuxcare.7","3.12.4-tuxcare.8","3.12.4-tuxcare.9"],"bundled":11},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/vite-builder","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.3-tuxcare.0"},{"fixed":"3.12.3-tuxcare.8"}]}],"versions":["3.12.3","3.12.3-tuxcare.1","3.12.3-tuxcare.3","3.12.3-tuxcare.4","3.12.3-tuxcare.5","3.12.3-tuxcare.6"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/vite-builder","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.0.3-tuxcare.0"},{"fixed":"4.0.3-tuxcare.7"}]}],"versions":["4.0.3","4.0.3-tuxcare.1","4.0.3-tuxcare.3","4.0.3-tuxcare.4","4.0.3-tuxcare.5","4.0.3-tuxcare.6"],"bundled":7},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/webpack-builder","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.2.0-tuxcare.0"},{"fixed":"3.2.0-tuxcare.5"}]}],"versions":["3.2.0","3.2.0-tuxcare.2","3.2.0-tuxcare.4"],"bundled":3},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/webpack-builder","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.4-tuxcare.0"},{"fixed":"3.12.4-tuxcare.12"}]}],"versions":["3.12.4","3.12.4-tuxcare.11","3.12.4-tuxcare.2","3.12.4-tuxcare.3","3.12.4-tuxcare.4","3.12.4-tuxcare.5","3.12.4-tuxcare.6","3.12.4-tuxcare.7","3.12.4-tuxcare.8","3.12.4-tuxcare.9"],"bundled":11},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/webpack-builder","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.3-tuxcare.0"},{"fixed":"3.12.3-tuxcare.8"}]}],"versions":["3.12.3","3.12.3-tuxcare.1","3.12.3-tuxcare.3","3.12.3-tuxcare.4","3.12.3-tuxcare.5","3.12.3-tuxcare.6"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/webpack-builder","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.0.3-tuxcare.0"},{"fixed":"4.0.3-tuxcare.7"}]}],"versions":["4.0.3","4.0.3-tuxcare.1","4.0.3-tuxcare.3","4.0.3-tuxcare.4","4.0.3-tuxcare.5"],"bundled":7},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nuxt/test-utils","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.2.0-tuxcare.0"},{"fixed":"3.2.0-tuxcare.5"}]}],"versions":["3.2.0","3.2.0-tuxcare.2","3.2.0-tuxcare.4"],"bundled":3},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxi","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.2.0-tuxcare.0"},{"fixed":"3.2.0-tuxcare.5"}]}],"versions":["3.2.0","3.2.0-tuxcare.2","3.2.0-tuxcare.4"],"bundled":3},{"source":"osv","ecosystem":"npm","package":"nuxt","ranges":[{"type":"SEMVER","events":[{"introduced":"4.0.0"},{"fixed":"4.4.7"}]}]},{"source":"osv","ecosystem":"npm","package":"nuxt","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"3.21.7"}]}]}],"products":[{"vendor":"@clerk","product":"nuxt"},{"vendor":"nuxt","product":"nuxt"}],"references":[{"url":"https://github.com/nuxt/nuxt/security/advisories/GHSA-m3q2-p4fw-w38m","tags":["vendor-advisory","Mitigation","Patch","Vendor Advisory","advisory","web"]},{"url":"https://github.com/nuxt/nuxt/commit/4b054e9d95f8daf366cb144b52782047c511a66e","tags":["patch","Patch","fix","web"]},{"url":"https://github.com/nuxt/nuxt/commit/7fea9fd687f1dacbfb63db5fae5839896b017a0e","tags":["patch","Patch","fix","web"]},{"url":"https://www.vulncheck.com/advisories/nuxt-cross-site-scripting-via-noscript-component-slot-content","tags":["third-party-advisory","Patch","Third Party Advisory","advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-56317","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-m3q2-p4fw-w38m"},{"url":"https://github.com/advisories/GHSA-xppm-jmw6-fhmf"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/56xxx/CVE-2026-56317.json","tags":["advisory"]},{"url":"https://github.com/nuxt/nuxt","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-56317","title":"Nuxt - Cross-Site Scripting via NoScript Component Slot Content","description":"Nuxt before 4.4.7 (and the 3.x branch before 3.21.7) contains a cross-site scripting vulnerability in the NoScript component that writes slot content to innerHTML without escaping. Attackers can inject malicious scripts through untrusted data in NoScript slots, such as route.query parameters, which execute in the document context when the noscript tag is implicitly closed by script tags.","status":"published","published":"2026-06-20T15:21:56.449Z","modified":"2026-11-08T14:05:58.678Z","cvss":[{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"low","assessor":"cna"}],"cwes":["CWE-79"],"updated_at":"2026-11-08T15:43:33.322657Z"}],"euvd":[{"id":"EUVD-2026-38112","description":"Nuxt before 4.4.7 (and the 3.x branch before 3.21.7) contains a cross-site scripting vulnerability in the NoScript component that writes slot content to innerHTML without escaping. Attackers can inject malicious scripts through untrusted data in NoScript slots, such as route.query parameters, which execute in the document context when the noscript tag is implicitly closed by script tags.","status":"published","published":"2026-06-20T15:21:56Z","modified":"2026-11-08T14:05:58Z","cvss":[{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"low"}],"updated_at":"2026-11-08T15:13:07.762611Z"}],"ghsa":[{"id":"GHSA-m3q2-p4fw-w38m","title":"Cross-site scripting via \u003cNoScript\u003e slot content in Nuxt's head components","description":"### Impact\n\nNuxt's globally registered `\u003cNoScript\u003e` component (from `@unhead/vue` head components, re-exported by Nuxt) wrote its default-slot content to the `innerHTML` of the `\u003cnoscript\u003e` head tag, bypassing the HTML escaping that `{{ }}` interpolation normally applies in Vue templates.\n\nApplications that placed untrusted, attacker-controllable data inside a `\u003cNoScript\u003e` slot, for example:\n\n```vue\n\u003cNoScript\u003e{{ route.query.banner }}\u003c/NoScript\u003e\n```\n\nwould emit that value unescaped inside `\u003cnoscript\u003e` in the server-rendered HTML. With scripting enabled, the HTML parser treats `\u003cnoscript\u003e` content in `\u003chead\u003e` under the \"in head noscript\" insertion mode: any tag other than `link`, `meta`, `noframes`, or `style` implicitly closes `\u003cnoscript\u003e` and is re-processed in the head. A payload such as `\u003cscript\u003e...\u003c/script\u003e` therefore escapes the element and executes in the document context.\n\nSibling head components (`\u003cStyle\u003e`, `\u003cTitle\u003e`) were not affected because they already routed slot text through the safe `textContent` path.\n\n### Affected versions\n\nAll currently supported versions of `nuxt` that ship the `\u003cNoScript\u003e` global component.\n\n### Patches\n\nFixed in `nuxt@4.4.7` (commit [`4b054e9d`](https://github.com/nuxt/nuxt/commit/4b054e9d95f8daf366cb144b52782047c511a66e)) and backported to `nuxt@3.21.7` (commit [`7fea9fd6`](https://github.com/nuxt/nuxt/commit/7fea9fd687f1dacbfb63db5fae5839896b017a0e)). The fix escapes `\u003cNoScript\u003e` slot content with `escapeHtml` from `@vue/shared` and writes it to `textContent` rather than `innerHTML`. Slot content is now rendered as text; intentional markup inside `\u003cNoScript\u003e` is no longer parsed as HTML.\n\n### Workarounds\n\nUntil you can upgrade:\n\n- Do not interpolate untrusted input into `\u003cNoScript\u003e` slots. Replace `\u003cNoScript\u003e{{ x }}\u003c/NoScript\u003e` with a static string, or sanitise / HTML-escape `x` at the source.\n- If you must render dynamic noscript content, write the tag yourself via `useHead({ noscript: [{ textContent: escapedValue }] })` after escaping `escapedValue`.\n\n### Credit\n\nReported to Anthropic's coordinated vulnerability disclosure pipeline by Claude (Anthropic's AI assistant) and triaged by the Anthropic security team. Reference: ANT-2026-4NJYDFFM.\n\nIndependently reported by [@alcls01111](https://github.com/alcls01111) via GitHub's coordinated disclosure flow (`GHSA-8grp-wcq9-925q`), closed as a duplicate of this advisory.","status":"published","published":"2026-06-16T23:38:47Z","modified":"2026-09-09T23:51:01Z","cvss":[{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"low"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:41:14.764963Z"},{"id":"GHSA-xppm-jmw6-fhmf","title":"Duplicate Advisory: Cross-site scripting via \u003cNoScript\u003e slot content in Nuxt's head components","description":"### Duplicate Advisory\nThis advisory has been withdrawn because it is a duplicate of GHSA-m3q2-p4fw-w38m. This link is maintained to preserve external references.\n\n### Original Description\nNuxt before 4.4.7 (and the 3.x branch before 3.21.7) contains a cross-site scripting vulnerability in the NoScript component that writes slot content to innerHTML without escaping. Attackers can inject malicious scripts through untrusted data in NoScript slots, such as route.query parameters, which execute in the document context when the noscript tag is implicitly closed by script tags.","status":"withdrawn","published":"2026-06-20T18:31:29Z","modified":"2026-09-09T23:50:36Z","cvss":[{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"low"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:41:14.764963Z"}],"nvd":[{"id":"CVE-2026-56317","description":"Nuxt before 4.4.7 (and the 3.x branch before 3.21.7) contains a cross-site scripting vulnerability in the NoScript component that writes slot content to innerHTML without escaping. Attackers can inject malicious scripts through untrusted data in NoScript slots, such as route.query parameters, which execute in the document context when the noscript tag is implicitly closed by script tags.","status":"published","published":"2026-06-20T16:17:05.733Z","modified":"2026-06-24T19:17:13.783Z","cvss":[{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"low","assessor":"secondary"},{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"primary"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:12:24.912854Z"}],"osv":[{"id":"CVE-2026-56317","title":"Nuxt - Cross-Site Scripting via NoScript Component Slot Content","description":"Nuxt before 4.4.7 (and the 3.x branch before 3.21.7) contains a cross-site scripting vulnerability in the NoScript component that writes slot content to innerHTML without escaping. Attackers can inject malicious scripts through untrusted data in NoScript slots, such as route.query parameters, which execute in the document context when the noscript tag is implicitly closed by script tags.","status":"published","published":"2026-06-20T15:21:56.449Z","modified":"2026-11-09T02:30:39.087314852Z","cvss":[{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"low"}],"cwes":["CWE-79"],"updated_at":"2026-11-09T03:16:44.651171Z"},{"id":"GHSA-m3q2-p4fw-w38m","title":"Cross-site scripting via \u003cNoScript\u003e slot content in Nuxt's head components","description":"### Impact\n\nNuxt's globally registered `\u003cNoScript\u003e` component (from `@unhead/vue` head components, re-exported by Nuxt) wrote its default-slot content to the `innerHTML` of the `\u003cnoscript\u003e` head tag, bypassing the HTML escaping that `{{ }}` interpolation normally applies in Vue templates.\n\nApplications that placed untrusted, attacker-controllable data inside a `\u003cNoScript\u003e` slot, for example:\n\n```vue\n\u003cNoScript\u003e{{ route.query.banner }}\u003c/NoScript\u003e\n```\n\nwould emit that value unescaped inside `\u003cnoscript\u003e` in the server-rendered HTML. With scripting enabled, the HTML parser treats `\u003cnoscript\u003e` content in `\u003chead\u003e` under the \"in head noscript\" insertion mode: any tag other than `link`, `meta`, `noframes`, or `style` implicitly closes `\u003cnoscript\u003e` and is re-processed in the head. A payload such as `\u003cscript\u003e...\u003c/script\u003e` therefore escapes the element and executes in the document context.\n\nSibling head components (`\u003cStyle\u003e`, `\u003cTitle\u003e`) were not affected because they already routed slot text through the safe `textContent` path.\n\n### Affected versions\n\nAll currently supported versions of `nuxt` that ship the `\u003cNoScript\u003e` global component.\n\n### Patches\n\nFixed in `nuxt@4.4.7` (commit [`4b054e9d`](https://github.com/nuxt/nuxt/commit/4b054e9d95f8daf366cb144b52782047c511a66e)) and backported to `nuxt@3.21.7` (commit [`7fea9fd6`](https://github.com/nuxt/nuxt/commit/7fea9fd687f1dacbfb63db5fae5839896b017a0e)). The fix escapes `\u003cNoScript\u003e` slot content with `escapeHtml` from `@vue/shared` and writes it to `textContent` rather than `innerHTML`. Slot content is now rendered as text; intentional markup inside `\u003cNoScript\u003e` is no longer parsed as HTML.\n\n### Workarounds\n\nUntil you can upgrade:\n\n- Do not interpolate untrusted input into `\u003cNoScript\u003e` slots. Replace `\u003cNoScript\u003e{{ x }}\u003c/NoScript\u003e` with a static string, or sanitise / HTML-escape `x` at the source.\n- If you must render dynamic noscript content, write the tag yourself via `useHead({ noscript: [{ textContent: escapedValue }] })` after escaping `escapedValue`.\n\n### Credit\n\nReported to Anthropic's coordinated vulnerability disclosure pipeline by Claude (Anthropic's AI assistant) and triaged by the Anthropic security team. Reference: ANT-2026-4NJYDFFM.\n\nIndependently reported by [@alcls01111](https://github.com/alcls01111) via GitHub's coordinated disclosure flow (`GHSA-8grp-wcq9-925q`), closed as a duplicate of this advisory.","status":"published","published":"2026-06-16T23:38:47Z","modified":"2026-09-10T00:00:07.97713743Z","cvss":[{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"low"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T15:46:51.10002Z"},{"id":"GHSA-xppm-jmw6-fhmf","title":"Duplicate Advisory: Cross-site scripting via \u003cNoScript\u003e slot content in Nuxt's head components","description":"### Duplicate Advisory\nThis advisory has been withdrawn because it is a duplicate of GHSA-m3q2-p4fw-w38m. This link is maintained to preserve external references.\n\n### Original Description\nNuxt before 4.4.7 (and the 3.x branch before 3.21.7) contains a cross-site scripting vulnerability in the NoScript component that writes slot content to innerHTML without escaping. Attackers can inject malicious scripts through untrusted data in NoScript slots, such as route.query parameters, which execute in the document context when the noscript tag is implicitly closed by script tags.","status":"withdrawn","published":"2026-06-20T18:31:29Z","modified":"2026-09-10T00:00:07.934408705Z","cvss":[{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","level":"low"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T15:47:00.198893Z"},{"id":"CLSA-2026-1788286444","title":"TuxCare security update for nuxt (2 CVEs)","description":"TuxCare rebuilt nuxt to address 2 CVEs. Fixed in 0.10.7-tuxcare.4.","status":"published","published":"2026-09-01T18:14:04Z","modified":"2026-10-15T09:47:55.450495075Z","updated_at":"2026-11-02T15:43:47.591214Z"},{"id":"CLSA-2026-1788337370","title":"TuxCare security update for nuxt (1 CVE)","description":"TuxCare rebuilt nuxt to address 1 CVE. Fixed in 1.4.5-tuxcare.5.","status":"published","published":"2026-09-02T08:22:50Z","modified":"2026-10-15T09:47:55.225179203Z","updated_at":"2026-11-02T15:43:47.591214Z"},{"id":"CLSA-2026-1788355153","title":"TuxCare security update for nuxt (3 CVEs)","description":"TuxCare rebuilt nuxt to address 3 CVEs. Fixed in 3.2.0-tuxcare.5.","status":"published","published":"2026-09-02T13:19:13Z","modified":"2026-10-30T19:45:59.684511967Z","updated_at":"2026-11-02T15:43:47.591214Z"},{"id":"CLSA-2026-1788450984","title":"TuxCare security update for nuxt (11 CVEs)","description":"TuxCare rebuilt nuxt to address 11 CVEs. Fixed in 3.12.4-tuxcare.12.","status":"published","published":"2026-09-03T15:56:24Z","modified":"2026-10-15T09:48:03.152914241Z","updated_at":"2026-11-02T15:43:47.591214Z"},{"id":"CLSA-2026-1788522007","title":"TuxCare security update for nuxt (1 CVE)","description":"TuxCare rebuilt nuxt to address 1 CVE. Fixed in 3.12.3-tuxcare.8.","status":"published","published":"2026-09-04T11:40:07Z","modified":"2026-10-15T09:48:03.215131457Z","updated_at":"2026-11-02T15:43:47.591214Z"},{"id":"CLSA-2026-1788960197","title":"TuxCare security update for nuxt (1 CVE)","description":"TuxCare rebuilt nuxt to address 1 CVE. Fixed in 2.18.1-tuxcare.5.","status":"published","published":"2026-09-09T13:23:17Z","modified":"2026-10-30T19:46:02.492951223Z","updated_at":"2026-11-02T15:43:47.938828Z"},{"id":"CLSA-2026-1789598338","title":"TuxCare security update for nuxt (7 CVEs)","description":"TuxCare rebuilt nuxt to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.","status":"published","published":"2026-09-16T22:38:58Z","modified":"2026-10-15T09:47:56.237986037Z","updated_at":"2026-11-02T15:43:48.28229Z"},{"id":"CLSA-2026-1792161458","title":"TuxCare security update for @nuxt/kit (3 CVEs)","description":"TuxCare rebuilt @nuxt/kit to address 3 CVEs. Fixed in 3.2.0-tuxcare.5.","status":"published","published":"2026-10-16T14:37:38Z","modified":"2026-10-16T16:31:03.076211229Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161460","title":"TuxCare security update for @nuxt/kit (11 CVEs)","description":"TuxCare rebuilt @nuxt/kit to address 11 CVEs. Fixed in 3.12.4-tuxcare.12.","status":"published","published":"2026-10-16T14:37:40Z","modified":"2026-10-16T16:31:03.072757342Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161461","title":"TuxCare security update for @nuxt/kit (1 CVE)","description":"TuxCare rebuilt @nuxt/kit to address 1 CVE. Fixed in 3.12.3-tuxcare.8.","status":"published","published":"2026-10-16T14:37:41Z","modified":"2026-10-16T16:30:58.381156407Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161463","title":"TuxCare security update for @nuxt/kit (7 CVEs)","description":"TuxCare rebuilt @nuxt/kit to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.","status":"published","published":"2026-10-16T14:37:43Z","modified":"2026-10-16T16:30:58.380403359Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161485","title":"TuxCare security update for @nuxt/rspack-builder (7 CVEs)","description":"TuxCare rebuilt @nuxt/rspack-builder to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.","status":"published","published":"2026-10-16T14:38:05Z","modified":"2026-10-16T16:30:59.69839942Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161599","title":"TuxCare security update for @nuxt/schema (3 CVEs)","description":"TuxCare rebuilt @nuxt/schema to address 3 CVEs. Fixed in 3.2.0-tuxcare.5.","status":"published","published":"2026-10-16T14:39:59Z","modified":"2026-10-16T16:31:06.209229636Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161601","title":"TuxCare security update for @nuxt/schema (11 CVEs)","description":"TuxCare rebuilt @nuxt/schema to address 11 CVEs. Fixed in 3.12.4-tuxcare.12.","status":"published","published":"2026-10-16T14:40:01Z","modified":"2026-10-16T16:31:05.866570588Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161602","title":"TuxCare security update for @nuxt/schema (1 CVE)","description":"TuxCare rebuilt @nuxt/schema to address 1 CVE. Fixed in 3.12.3-tuxcare.8.","status":"published","published":"2026-10-16T14:40:02Z","modified":"2026-10-16T16:31:05.86675636Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161604","title":"TuxCare security update for @nuxt/schema (7 CVEs)","description":"TuxCare rebuilt @nuxt/schema to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.","status":"published","published":"2026-10-16T14:40:04Z","modified":"2026-10-16T16:31:05.873102631Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161821","title":"TuxCare security update for @nuxt/vite-builder (3 CVEs)","description":"TuxCare rebuilt @nuxt/vite-builder to address 3 CVEs. Fixed in 3.2.0-tuxcare.5.","status":"published","published":"2026-10-16T14:43:41Z","modified":"2026-10-16T16:30:32.834069291Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161823","title":"TuxCare security update for @nuxt/vite-builder (11 CVEs)","description":"TuxCare rebuilt @nuxt/vite-builder to address 11 CVEs. Fixed in 3.12.4-tuxcare.12.","status":"published","published":"2026-10-16T14:43:43Z","modified":"2026-10-16T16:30:34.584872899Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161824","title":"TuxCare security update for @nuxt/vite-builder (1 CVE)","description":"TuxCare rebuilt @nuxt/vite-builder to address 1 CVE. Fixed in 3.12.3-tuxcare.8.","status":"published","published":"2026-10-16T14:43:44Z","modified":"2026-10-16T16:30:32.835532754Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161826","title":"TuxCare security update for @nuxt/vite-builder (7 CVEs)","description":"TuxCare rebuilt @nuxt/vite-builder to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.","status":"published","published":"2026-10-16T14:43:46Z","modified":"2026-10-16T16:30:32.87761218Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161934","title":"TuxCare security update for @nuxt/webpack-builder (3 CVEs)","description":"TuxCare rebuilt @nuxt/webpack-builder to address 3 CVEs. Fixed in 3.2.0-tuxcare.5.","status":"published","published":"2026-10-16T14:45:34Z","modified":"2026-10-16T16:31:29.979494331Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161936","title":"TuxCare security update for @nuxt/webpack-builder (11 CVEs)","description":"TuxCare rebuilt @nuxt/webpack-builder to address 11 CVEs. Fixed in 3.12.4-tuxcare.12.","status":"published","published":"2026-10-16T14:45:36Z","modified":"2026-10-16T16:31:30.28168697Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161937","title":"TuxCare security update for @nuxt/webpack-builder (1 CVE)","description":"TuxCare rebuilt @nuxt/webpack-builder to address 1 CVE. Fixed in 3.12.3-tuxcare.8.","status":"published","published":"2026-10-16T14:45:37Z","modified":"2026-10-16T16:31:41.011933143Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161939","title":"TuxCare security update for @nuxt/webpack-builder (7 CVEs)","description":"TuxCare rebuilt @nuxt/webpack-builder to address 7 CVEs. Fixed in 4.0.3-tuxcare.7.","status":"published","published":"2026-10-16T14:45:39Z","modified":"2026-10-16T16:31:19.053836641Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792163457","title":"TuxCare security update for @nuxt/test-utils (3 CVEs)","description":"TuxCare rebuilt @nuxt/test-utils to address 3 CVEs. Fixed in 3.2.0-tuxcare.5.","status":"published","published":"2026-10-16T15:10:57Z","modified":"2026-10-16T16:31:44.380761389Z","updated_at":"2026-11-02T15:43:51.466048Z"},{"id":"CLSA-2026-1793661075","title":"TuxCare security update for nuxi (3 CVEs)","description":"TuxCare rebuilt nuxi to address 3 CVEs. Fixed in 3.2.0-tuxcare.5.","status":"published","published":"2026-11-03T00:11:15Z","modified":"2026-11-03T02:45:02.364297406Z","updated_at":"2026-11-03T03:05:43.703218Z"}]}}
