Zum Inhalt springen

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.

Eigene App kostenlos prüfen