{"id":"CVE-2026-114130","aliases":["CLSA-2026-1793809504","CLSA-2026-1793810012","CLSA-2026-1793810180","CLSA-2026-1793811511","CLSA-2026-1793812844","EUVD-2026-107413","GHSA-jjm6-p2m9-9w4x"],"status":"published","title":"Nuxt: Incomplete fix for GHSA-934w-87qh-qr26: a `javascript:` URL prefixed with an ASCII control character executes from `\u003cNuxtLink\u003e` when `pages` is disabled","description":"Nuxt is an open-source web development framework for Vue.js. Prior to 4.6.0, an incomplete fix for CVE-2026-53722 allows an application with pages disabled to render a script-capable URL through NuxtLink when attacker-controlled input bound to to is prefixed with an ASCII C0 control character. The no-pages router classifies the value as an internal route before the earlier protocol check and passes it to the rendered anchor href; browsers remove the leading control character and interpret the remaining javascript: URL. The default anchor and NuxtLink custom output are affected, the unsafe href is present in server-rendered HTML, and a victim must click the link for script to execute in the application's origin. This issue is fixed in version 4.6.0.","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-12","score":0.00406,"percentile":0.35401,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-79"],"published":"2026-10-21T17:37:58Z","modified":"2026-11-04T19:00:41Z","fixes":[{"ecosystem":"npm","package":"nuxt","fixed_in":["4.6.0"],"sources":["ghsa","osv"]},{"ecosystem":"TuxCare:npm","package":"nuxt","fixed_in":["1.4.5-tuxcare.7","3.2.0-tuxcare.12"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.6.0"}]}]},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.4.5-tuxcare.0"},{"fixed":"1.4.5-tuxcare.7"}]}],"versions":["1.4.5","1.4.5-tuxcare.1","1.4.5-tuxcare.2","1.4.5-tuxcare.3","1.4.5-tuxcare.4","1.4.5-tuxcare.5","1.4.5-tuxcare.6"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.3-tuxcare.0"},{"fixed":"3.12.3-tuxcare.14"}]}],"versions":["3.12.3","3.12.3-tuxcare.1","3.12.3-tuxcare.10","3.12.3-tuxcare.11","3.12.3-tuxcare.12","3.12.3-tuxcare.13","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","3.12.3-tuxcare.8","3.12.3-tuxcare.9"],"bundled":2},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.12.4-tuxcare.0"},{"fixed":"3.12.4-tuxcare.20"}]}],"versions":["3.12.4","3.12.4-tuxcare.10","3.12.4-tuxcare.11","3.12.4-tuxcare.12","3.12.4-tuxcare.13","3.12.4-tuxcare.14","3.12.4-tuxcare.15","3.12.4-tuxcare.16","3.12.4-tuxcare.17","3.12.4-tuxcare.18","3.12.4-tuxcare.19","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":2},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.0.3-tuxcare.0"},{"fixed":"4.0.3-tuxcare.12"}]}],"versions":["4.0.3","4.0.3-tuxcare.1","4.0.3-tuxcare.10","4.0.3-tuxcare.11","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","4.0.3-tuxcare.7","4.0.3-tuxcare.8","4.0.3-tuxcare.9"],"bundled":3},{"source":"osv","ecosystem":"TuxCare:npm","package":"nuxt","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.2.0-tuxcare.0"},{"fixed":"3.2.0-tuxcare.12"}]}],"versions":["3.2.0","3.2.0-tuxcare.1","3.2.0-tuxcare.10","3.2.0-tuxcare.11","3.2.0-tuxcare.2","3.2.0-tuxcare.3","3.2.0-tuxcare.4","3.2.0-tuxcare.5","3.2.0-tuxcare.6","3.2.0-tuxcare.7","3.2.0-tuxcare.8","3.2.0-tuxcare.9"]},{"source":"osv","ecosystem":"npm","package":"nuxt","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"4.6.0"}]}]}],"products":[{"vendor":"@clerk","product":"nuxt"},{"vendor":"nuxt","product":"nuxt"}],"references":[{"url":"https://github.com/nuxt/nuxt/security/advisories/GHSA-jjm6-p2m9-9w4x","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/nuxt/nuxt/pull/36459","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/nuxt/nuxt/commit/355ed9565127ff9b1453deb7160059ed55b3cb85","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/nuxt/nuxt/commit/df46569d5d3c7a7799de54c328634168fbae70bb","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/nuxt/nuxt/releases/tag/v4.6.0","tags":["x_refsource_MISC","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-114130","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-jjm6-p2m9-9w4x"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/114xxx/CVE-2026-114130.json","tags":["advisory"]},{"url":"https://github.com/nuxt/nuxt","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-114130","title":"Nuxt: Incomplete fix for GHSA-934w-87qh-qr26: a `javascript:` URL prefixed with an ASCII control character executes from `\u003cNuxtLink\u003e` when `pages` is disabled","description":"Nuxt is an open-source web development framework for Vue.js. Prior to 4.6.0, an incomplete fix for CVE-2026-53722 allows an application with pages disabled to render a script-capable URL through NuxtLink when attacker-controlled input bound to to is prefixed with an ASCII C0 control character. The no-pages router classifies the value as an internal route before the earlier protocol check and passes it to the rendered anchor href; browsers remove the leading control character and interpret the remaining javascript: URL. The default anchor and NuxtLink custom output are affected, the unsafe href is present in server-rendered HTML, and a victim must click the link for script to execute in the application's origin. This issue is fixed in version 4.6.0.","status":"published","published":"2026-10-21T17:37:58.4Z","modified":"2026-10-28T01:29:47.913Z","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-02T13:39:50.160666Z"}],"euvd":[{"id":"EUVD-2026-107413","description":"Nuxt is an open-source web development framework for Vue.js. Prior to 4.6.0, an incomplete fix for CVE-2026-53722 allows an application with pages disabled to render a script-capable URL through NuxtLink when attacker-controlled input bound to to is prefixed with an ASCII C0 control character. The no-pages router classifies the value as an internal route before the earlier protocol check and passes it to the rendered anchor href; browsers remove the leading control character and interpret the remaining javascript: URL. The default anchor and NuxtLink custom output are affected, the unsafe href is present in server-rendered HTML, and a victim must click the link for script to execute in the application's origin. This issue is fixed in version 4.6.0.","status":"published","published":"2026-10-21T17:37:58Z","modified":"2026-10-28T01:29:47Z","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-02T16:59:22.052945Z"}],"ghsa":[{"id":"GHSA-jjm6-p2m9-9w4x","title":"Nuxt: Incomplete fix for GHSA-934w-87qh-qr26: a `javascript:` URL prefixed with an ASCII control character executes from `\u003cNuxtLink\u003e` when `pages` is disabled","description":"## Impact\n\nAn application that renders `\u003cNuxtLink :to=\"...\"\u003e` with a value it does not control can be made to render an anchor whose `href` executes script in the application's origin when clicked.\n\nThis is an incomplete fix for [GHSA-934w-87qh-qr26](https://github.com/nuxt/nuxt/security/advisories/GHSA-934w-87qh-qr26) (CVE-2026-53722). It only affects applications running without a `pages/` directory, where `pages` resolves to `false` and Nuxt registers its own router in place of vue-router. Applications using vue-router are not affected.\n\nPrefixing `javascript:` with an ASCII C0 control character, for example `%01`, meant the value was not recognised as having a protocol. It was classified as an internal route and so never reached the protocol check added in GHSA-934w-87qh-qr26, and the router used for `pages: false` passed it through to the rendered `href` unchanged. Browsers strip the leading control character and run the result as a script URL.\n\nBoth `\u003cNuxtLink custom\u003e` and the default anchor are affected, and the `href` is present in the server-rendered HTML.\n\n## Mitigating factors\n\n- The application must have `pages` disabled (no `pages/` directory, or `pages: false`).\n- The application must bind untrusted input to `:to`.\n- A victim must click the rendered link.\n\n## Affected versions\n\n`nuxt` `\u003c4.6.0`, including all Nuxt 3 releases. Versions before `4.4.7` and `3.21.7` are also affected by GHSA-934w-87qh-qr26.\n\n## Patches\n\nFixed in `nuxt@4.6.0`. Nuxt 3 reached end of life on 31 July 2026 and will not receive a fix.\n\nAnchor `href` values are now checked for script-capable protocols wherever they are rendered, including the router used when `pages` is disabled. Protocol detection also moved to the platform `URL` parser, so a URL is classified the same way the browser will read it.\n\n## Workarounds\n\nUpgrade to `nuxt@4.6.0` or later. If you cannot upgrade, including on Nuxt 3, validate values before binding them to `:to`, for example by rejecting anything that is not a path beginning with a single `/`.","status":"published","published":"2026-10-22T16:51:37Z","modified":"2026-10-22T16:51:39Z","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:35.723785Z"}],"nvd":[{"id":"CVE-2026-114130","description":"Nuxt is an open-source web development framework for Vue.js. Prior to 4.6.0, an incomplete fix for CVE-2026-53722 allows an application with pages disabled to render a script-capable URL through NuxtLink when attacker-controlled input bound to to is prefixed with an ASCII C0 control character. The no-pages router classifies the value as an internal route before the earlier protocol check and passes it to the rendered anchor href; browsers remove the leading control character and interpret the remaining javascript: URL. The default anchor and NuxtLink custom output are affected, the unsafe href is present in server-rendered HTML, and a victim must click the link for script to execute in the application's origin. This issue is fixed in version 4.6.0.","status":"published","published":"2026-10-21T18:17:25.803Z","modified":"2026-10-28T02:17:05.1Z","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"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:13:02.371082Z"}],"osv":[{"id":"CVE-2026-114130","title":"Nuxt: Incomplete fix for GHSA-934w-87qh-qr26: a `javascript:` URL prefixed with an ASCII control character executes from `\u003cNuxtLink\u003e` when `pages` is disabled","description":"Nuxt is an open-source web development framework for Vue.js. Prior to 4.6.0, an incomplete fix for CVE-2026-53722 allows an application with pages disabled to render a script-capable URL through NuxtLink when attacker-controlled input bound to to is prefixed with an ASCII C0 control character. The no-pages router classifies the value as an internal route before the earlier protocol check and passes it to the rendered anchor href; browsers remove the leading control character and interpret the remaining javascript: URL. The default anchor and NuxtLink custom output are affected, the unsafe href is present in server-rendered HTML, and a victim must click the link for script to execute in the application's origin. This issue is fixed in version 4.6.0.","status":"published","published":"2026-10-21T17:37:58.4Z","modified":"2026-10-29T02:30:53.803225331Z","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:44:56.310988Z"},{"id":"GHSA-jjm6-p2m9-9w4x","title":"Nuxt: Incomplete fix for GHSA-934w-87qh-qr26: a `javascript:` URL prefixed with an ASCII control character executes from `\u003cNuxtLink\u003e` when `pages` is disabled","description":"## Impact\n\nAn application that renders `\u003cNuxtLink :to=\"...\"\u003e` with a value it does not control can be made to render an anchor whose `href` executes script in the application's origin when clicked.\n\nThis is an incomplete fix for [GHSA-934w-87qh-qr26](https://github.com/nuxt/nuxt/security/advisories/GHSA-934w-87qh-qr26) (CVE-2026-53722). It only affects applications running without a `pages/` directory, where `pages` resolves to `false` and Nuxt registers its own router in place of vue-router. Applications using vue-router are not affected.\n\nPrefixing `javascript:` with an ASCII C0 control character, for example `%01`, meant the value was not recognised as having a protocol. It was classified as an internal route and so never reached the protocol check added in GHSA-934w-87qh-qr26, and the router used for `pages: false` passed it through to the rendered `href` unchanged. Browsers strip the leading control character and run the result as a script URL.\n\nBoth `\u003cNuxtLink custom\u003e` and the default anchor are affected, and the `href` is present in the server-rendered HTML.\n\n## Mitigating factors\n\n- The application must have `pages` disabled (no `pages/` directory, or `pages: false`).\n- The application must bind untrusted input to `:to`.\n- A victim must click the rendered link.\n\n## Affected versions\n\n`nuxt` `\u003c4.6.0`, including all Nuxt 3 releases. Versions before `4.4.7` and `3.21.7` are also affected by GHSA-934w-87qh-qr26.\n\n## Patches\n\nFixed in `nuxt@4.6.0`. Nuxt 3 reached end of life on 31 July 2026 and will not receive a fix.\n\nAnchor `href` values are now checked for script-capable protocols wherever they are rendered, including the router used when `pages` is disabled. Protocol detection also moved to the platform `URL` parser, so a URL is classified the same way the browser will read it.\n\n## Workarounds\n\nUpgrade to `nuxt@4.6.0` or later. If you cannot upgrade, including on Nuxt 3, validate values before binding them to `:to`, for example by rejecting anything that is not a path beginning with a single `/`.","status":"published","published":"2026-10-22T16:51:37Z","modified":"2026-10-22T17:00:04.471901983Z","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:50.687609Z"},{"id":"CLSA-2026-1793809504","title":"TuxCare security update for nuxt (1 CVE)","description":"TuxCare rebuilt nuxt to address 1 CVE. Fixed in 1.4.5-tuxcare.7.","status":"published","published":"2026-11-04T17:25:06Z","modified":"2026-11-04T19:00:35.348524023Z","updated_at":"2026-11-04T19:15:03.6858Z"},{"id":"CLSA-2026-1793810012","title":"TuxCare security update for nuxt (2 CVEs)","description":"TuxCare rebuilt nuxt to address 2 CVEs. Fixed in 3.12.3-tuxcare.14.","status":"published","published":"2026-11-04T17:33:33Z","modified":"2026-11-04T19:00:36.331481328Z","updated_at":"2026-11-04T19:15:03.6858Z"},{"id":"CLSA-2026-1793810180","title":"TuxCare security update for nuxt (2 CVEs)","description":"TuxCare rebuilt nuxt to address 2 CVEs. Fixed in 3.12.4-tuxcare.20.","status":"published","published":"2026-11-04T17:36:21Z","modified":"2026-11-04T19:00:35.353024078Z","updated_at":"2026-11-04T19:15:03.6858Z"},{"id":"CLSA-2026-1793811511","title":"TuxCare security update for nuxt (3 CVEs)","description":"TuxCare rebuilt nuxt to address 3 CVEs. Fixed in 4.0.3-tuxcare.12.","status":"published","published":"2026-11-04T17:58:32Z","modified":"2026-11-04T19:00:39.844850976Z","updated_at":"2026-11-04T19:15:03.6858Z"},{"id":"CLSA-2026-1793812844","title":"TuxCare security update for nuxt (1 CVE)","description":"TuxCare rebuilt nuxt to address 1 CVE. Fixed in 3.2.0-tuxcare.12.","status":"published","published":"2026-11-04T18:20:44Z","modified":"2026-11-04T19:00:41.091158692Z","updated_at":"2026-11-04T19:15:03.6858Z"}]}}
