Packages / nuxt / Security

LowVulnerabilityGHSA-jjm6-p2m9-9w4xCVE-2026-114130Published 22 Oct 2026

Nuxt: Incomplete fix for GHSA-934w-87qh-qr26: a `javascript:` URL prefixed with an ASCII control character executes from `<NuxtLink>` when `pages` is disabled

Affected releases · nuxt

  • 4.x4.0.0 – 4.5.2Fixed in 4.6.0
  • 3.x3.0.0 – 3.21.11No fix on this line yet
  • 2.x and older0.0.1 – 2.18.1No fix, no longer updated

On 4.x, the newest line:

npm install nuxt@4.6.0
4.x
  1. Affected

    4.0.0 – 4.5.2

    22 releases

  2. Fixed

    4.6.0 – 4.6.2

    3 releases, latest

3.x
  1. Affected

    3.0.0 – 3.21.11

    92 releases

2.x
  1. Affected

    2.0.0 – 2.18.1

    70 releases

1.x
  1. Affected

    1.0.0 – 1.4.5

    12 releases

0.x
  1. Affected

    0.0.1 – 0.10.7

    81 releases

280 stable releases of nuxt, oldest to newest, one row per major.

Is your project affected?

Paste your package.json, or type the range you declare for nuxt. It is read in your browser and sent nowhere.

What happens

Impact

An application that renders <NuxtLink :to="..."> 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.

This is an incomplete fix for 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.

Prefixing 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.

Both <NuxtLink custom> and the default anchor are affected, and the href is present in the server-rendered HTML.

Mitigating factors

  • The application must have pages disabled (no pages/ directory, or pages: false).

  • The application must bind untrusted input to :to.

  • A victim must click the rendered link.

Affected versions

nuxt <4.6.0, including all Nuxt 3 releases. Versions before 4.4.7 and 3.21.7 are also affected by GHSA-934w-87qh-qr26.

Patches

Fixed in nuxt@4.6.0. Nuxt 3 reached end of life on 31 July 2026 and will not receive a fix.

Anchor 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.

Workarounds

Upgrade 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 /.