
Cloud Vulnerability DB
A community-led vulnerabilities database
A wildcard redirect route rule whose target is /** copies the rest of the request path into the Location header. The 2.13.4 fix for GHSA-9phm-9p8f-hw5m collapses only a leading //, and only when the rule has no strip base. A remainder that starts with a backslash (raw or %5C) or with a tab followed by a slash (%09/) is emitted unchanged. Browsers treat \ as / in special-scheme URLs and strip tab, LF and CR, so /\evil.example and /<TAB>/evil.example resolve to //evil.example, a cross-origin redirect.
Affected code (nitropack v2):
src/runtime/internal/route-rules.ts, redirect branch:'/old/**'): isPathInScope() passes, because WHATWG URL canonicalizes \ to / and the path stays under /old. Then withoutBase(event.path, base) returns /\evil.example unchanged, and joinURL("/", ...) keeps it.'/**'): only ^//+ is collapsed. /\, /%5C and /<TAB>/ pass through.%5C and %09 in event.path, so the Location contains the literal characters.export default defineNitroConfig({
routeRules: { "/old/**": { redirect: "/**" } },
});| Request | Location (≤ 2.13.5) | Browser resolves to | Location after fix |
|---|---|---|---|
/old/%5Cevil.example | /\evil.example | https://evil.example | /evil.example |
/old/\evil.example | /\evil.example | https://evil.example | /evil.example |
/old/%5c%5cevil.example | /\\evil.example | https://evil.example | /evil.example |
/old/%5C/evil.example | /\/evil.example | https://evil.example | /evil.example |
/old/%09/evil.example | /<TAB>/evil.example | https://evil.example | /evil.example |
/%5Cevil.example (catch-all '/**') | /\evil.example | https://evil.example | /evil.example |
/%09/evil.example (catch-all) | /<TAB>/evil.example | https://evil.example | /evil.example |
/old/%0A/evil.example | 500 (Node rejects the header) | not exploitable on Node; defence in depth | /evil.example |
An attacker sends a victim a link on the trusted site, such as https://victim.example/old/%5Cevil.example. The site redirects the victim's browser to an attacker-controlled origin.
You are affected if all of these are true:
redirect route rule whose target is exactly /**, with nothing before it;Fixed in nitropack 2.13.6. Any leading run of slashes, backslashes, control characters and their percent-encoded forms in the redirect remainder is collapsed to a single /, so the Location header is always a same-origin path.
If you cannot upgrade:
/new/** instead of /**);Source: NVD
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."