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`
(updated )
Three weaknesses in Nuxt’s client-navigation URL handling, all reachable
from documented public APIs (navigateTo and reloadNuxtApp):
(CVE-2026-56326) SSR open redirect in
navigateTovia path-normalisation bypass.navigateTodecided whether a target was external by inspecting the raw input withhasProtocol(..., { acceptRelative: true }). Inputs such as/..//evil.com,/.//evil.com,/%2e%2e//evil.com, or/app/..//evil.comslipped 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 theLocationresponse 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.(CVE-2026-56698) Client-side script execution via
navigateTo({ open: ... }). The client-side early-open handler calledwindow.open(toPath, ...)without applying theisScriptProtocolcheck that gates the normalnavigateTopath. A target ofjavascript:...(or another script-capable scheme) passed tonavigateTo(url, { open: { ... } })therefore executed in the application’s origin instead of being rejected.(CVE-2026-56697) Open redirect in
reloadNuxtAppvia protocol-relative bypass.reloadNuxtApp({ path })rejects script-capable protocols by parsing the path withnew URL(path, window.location.href)and checking the resolvedprotocolagainstisScriptProtocol. Protocol-relative paths such as//evil.comresolve to the current page’s protocol (https:), which passes that check; the value is then assigned towindow.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
- nvd.nist.gov/vuln/detail/CVE-2026-56697
- nvd.nist.gov/vuln/detail/CVE-2026-56698
- www.vulncheck.com/advisories/nuxt-cross-site-scripting-via-navigateto-open-option
- www.vulncheck.com/advisories/nuxt-open-redirect-via-protocol-relative-paths-in-reloadnuxtapp
- www.vulncheck.com/advisories/nuxt-server-side-open-redirect-via-path-normalization-bypass-in-navigateto
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. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →