Advisory Database
  • Advisories
  • Dependency Scanning
  1. npm
  2. ›
  3. nuxt
  4. ›
  5. GHSA-c9cv-mq2m-ppp3

GHSA-c9cv-mq2m-ppp3: Nuxt: URL-handling weaknesses in `navigateTo` and `reloadNuxtApp`: SSR open redirect, client-side script execution via the `open` option, and protocol-relative bypass in `reloadNuxtApp`

June 16, 2026 (updated June 22, 2026)

Three weaknesses in Nuxt’s client-navigation URL handling, all reachable from documented public APIs (navigateTo and reloadNuxtApp):

  1. SSR open redirect in navigateTo via path-normalisation bypass. navigateTo decided whether a target was external by inspecting the raw input with hasProtocol(..., { acceptRelative: true }). Inputs such as /..//evil.com, /.//evil.com, /%2e%2e//evil.com, or /app/..//evil.com slipped past that check because they start with /, but WHATWG URL parsing then normalised them to the protocol-relative pathname //evil.com. The normalised value was written to the Location response header and into the <meta http-equiv="refresh"> body of the SSR redirect page, so a victim’s browser would resolve the redirect cross-origin to the attacker’s host.

  2. Client-side script execution via navigateTo({ open: ... }). The client-side early-open handler called window.open(toPath, ...) without applying the isScriptProtocol check that gates the normal navigateTo path. A target of javascript:... (or another script-capable scheme) passed to navigateTo(url, { open: { ... } }) therefore executed in the application’s origin instead of being rejected.

  3. Open redirect in reloadNuxtApp via protocol-relative bypass. reloadNuxtApp({ path }) rejects script-capable protocols by parsing the path with new URL(path, window.location.href) and checking the resolved protocol against isScriptProtocol. Protocol-relative paths such as //evil.com resolve to the current page’s protocol (https:), which passes that check; the value is then assigned to window.location.href, which the browser treats as a cross-origin redirect. This is the same protocol-relative bypass family as (1), in a different sink.

References

  • github.com/advisories/GHSA-c9cv-mq2m-ppp3
  • github.com/nuxt/nuxt/commit/1f2dd5e78c77576437138e97671965573c232835
  • github.com/nuxt/nuxt/commit/2cce6fb02e621196d56df92e05594e07469b5a6d
  • github.com/nuxt/nuxt/commit/3394716d4a913cba904b028df5338f2aead50032
  • github.com/nuxt/nuxt/commit/62fc32eddf648b00a3890141e0235d2a222b024d
  • github.com/nuxt/nuxt/commit/6497d99dd106254abd089f6a263d7773869a343b
  • github.com/nuxt/nuxt/commit/e447a793c47766834f7497f8412a76cd56fd8ee1
  • github.com/nuxt/nuxt/pull/35115
  • github.com/nuxt/nuxt/pull/35206
  • github.com/nuxt/nuxt/security/advisories/GHSA-c9cv-mq2m-ppp3
  • nvd.nist.gov/vuln/detail/CVE-2026-56326

Code Behaviors & Features

Detect and mitigate GHSA-c9cv-mq2m-ppp3 with GitLab Dependency Scanning

Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →

Affected versions

All versions before 3.21.7, all versions starting from 4.0.0 before 4.4.7

Fixed versions

  • 3.21.7
  • 4.4.7

Solution

Upgrade to versions 3.21.7, 4.4.7 or above.

Impact 6.1 MEDIUM

CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N

Learn more about CVSS

Weakness

  • CWE-601: URL Redirection to Untrusted Site ('Open Redirect')
  • CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Source file

npm/nuxt/GHSA-c9cv-mq2m-ppp3.yml

Spotted a mistake? Edit the file on GitLab.

  • Site Repo
  • About GitLab
  • Terms
  • Privacy Statement
  • Contact

Page generated Tue, 23 Jun 2026 12:22:33 +0000.