Weiterleitung auf ein Ziel aus der Anfrage (Open Redirect)
Prüfregel · RSC-SEC-145
- Sicherheit
- Schweregrad: Mittel
- CWE-601
- OWASP A01-2021
Findet Redirects (`redirect`, `NextResponse.redirect`, `res.redirect`, `Location`-Header) auf einen Parameter wie `next`, `redirectTo`, `returnTo` oder `callbackUrl` ohne Prüfung auf relativen Pfad oder Allowlist — besonders im OAuth-Callback.
Warum das zählt
Nach dem Login zurück dorthin, wo der Nutzer herkam: Dafür trägt der Callback einen Parameter wie `?next=/konto`. Die ältere Supabase-Vorlage für `/auth/callback` hängt ihn ungeprüft an die eigene Origin — aus `?next=@evil.example` wird so `https://eure-app.de@evil.example`, und der Browser landet auf einem fremden Host.
Für Phishing ist das ideal: Der Link zeigt eure echte Domain, der Nutzer sieht euer echtes Login, und erst danach geht es auf die Kopie. Auch `startsWith("/")` allein reicht nicht, wenn das Ziel direkt verwendet wird — `//evil.example` beginnt ebenfalls mit einem Schrägstrich.
Fix: Das Ziel nur übernehmen, wenn es mit genau einem `/` beginnt und kein `//` enthält, und es an die eigene Origin hängen. Für externe Ziele eine feste Liste führen und `new URL(ziel).origin` dagegen vergleichen.
Prüfstufe
- Quellcode aus Source Maps
- Repo-Zugang (Deep-Scan)
So behebt ihr es
Nur relative Pfade zulassen, die mit genau einem „/“ beginnen (nicht „//“), und das Ziel an die eigene Origin hängen — oder gegen eine Liste erlaubter Ziele prüfen.