
PEACH
Un cadre d’isolation des locataires
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
Évaluation gratuite des vulnérabilités
Évaluez vos pratiques de sécurité cloud dans 9 domaines de sécurité afin d’évaluer votre niveau de risque et d’identifier les lacunes dans vos défenses.
Obtenez une démo personnalisée
"La meilleure expérience utilisateur que j’ai jamais vue, offre une visibilité totale sur les workloads cloud."
"Wiz fournit une interface unique pour voir ce qui se passe dans nos environnements cloud."
"Nous savons que si Wiz identifie quelque chose comme critique, c’est qu’il l’est réellement."