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):
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.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.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
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 →