hackatoll
Zur Lernplattform

Wissen › Open Redirect / Unvalidated Redirect

Open Redirect / Unvalidated Redirect

Eine Weiterleitung übernimmt ein ungeprüftes Ziel aus dem Request und schickt Besucher auf eine fremde Domain.

Weiterleitungen Schweregrad: Mittel
Trainings-Lektion Anmeldung nötig

Lies den Artikel und beantworte am Ende 9 Fragen. Erst wenn alle richtig beantwortet sind, ist die Lektion im Training erledigt.

Zu den Fragen ↓

Von einem Open Redirect spricht man, wenn eine Anwendung ein Weiterleitungsziel aus dem Request übernimmt, ohne ausreichend zu prüfen, wohin umgeleitet wird. Angreifer hängen eine fremde Zieladresse an einen vertrauenswürdigen Link – das Opfer sieht die bekannte Domain, landet aber woanders. Das ist die klassische Grundlage für glaubwürdiges Phishing.

Wie der Angriff funktioniert

Varianten

Parameter-Weiterleitung: Ein Link wie /weiter?ziel=… übernimmt das Ziel direkt aus dem Request. Ohne Freigabeliste erlaubter Ziele landet der Besucher auf einer fremden Domain.
Rückleitung nach Login/OAuth: Ein redirect_url, der nach erfolgreicher Anmeldung angesteuert wird, ist besonders heikel: Hier können Token oder Sessions an ein angreifergewähltes Ziel gelangen.
Client-seitige Weiterleitung: Auch Meta-Refresh und JavaScript-Redirects (location = …) auf Basis eines Request-Werts sind betroffen – die Zielprüfung muss also unabhängig davon greifen, wo die Weiterleitung technisch passiert.

Beispiel

Der Unterschied ist die Zielprüfung – Blockliste vs. Freigabeliste:

// verwundbar: Ziel aus dem Request, nur per Blockliste (sanitizeLocalUrl),
// Rückgabewert roh als Location
$ziel = (string)($request->getQueryParams()['ziel'] ?? '');
$ziel = GeneralUtility::sanitizeLocalUrl($ziel); // /\evil.example kommt durch
if ($ziel !== '') { return new RedirectResponse($ziel, 303); }

// sicher: gegen feste Freigabeliste prüfen
$erlaubt = ['/tauchen', '/kontakt'];
if (in_array($ziel, $erlaubt, true)) { return new RedirectResponse($ziel, 303); }

Mögliche Auswirkungen

Selbst prüfen: Sind meine Weiterleitungen dicht?

Jede Stelle, an der ein Request-Wert zum Weiterleitungsziel wird, lässt sich gegen die gleiche kurze Checkliste halten. Der Leitgedanke: Freigabeliste statt Blockliste, und das Ziel serverseitig gegen die eigene Domain abgleichen.

1. Freigabeliste statt Blockliste?

Prüfe Ziele gegen eine feste Liste erlaubter Hosts/Pfade. Blocklisten (verbotene Zeichen/Präfixe) lassen sich durch Normalisierung des Browsers umgehen und sind kein verlässlicher Schutz.

2. Wird das Ziel absolut aufgelöst?

Ein Ziel serverseitig zu einer absoluten URL auflösen und den Host explizit gegen die eigene(n) Domain(s) abgleichen, statt den Request-String roh als Location-Header zu senden.

3. Lässt sich die URL durch einen Key ersetzen?

Am robustesten ist es, gar keine vom Nutzer gelieferte URL weiterzureichen, sondern einen internen Key/eine ID auf ein fest hinterlegtes Ziel abzubilden.

4. Sind Core und Extensions aktuell?

Weiterleitungs-Helfer des Cores hatten eigene Lücken (z. B. sanitizeLocalUrl bis 11.5.50, CVE-2026-47347). Aktueller Stand (hier ≥ 11.5.51 ELTS) schließt die bekannten Fälle.

◆ In TYPO3 beachten

Worauf du in TYPO3 achten musst

In TYPO3 entstehen Open Redirects überall dort, wo ein Request-Parameter als Weiterleitungsziel dient – in eigener Glue-Logik ebenso wie in Extensions. Der Core stellt mit GeneralUtility::sanitizeLocalUrl() einen Helfer bereit, der aber nur so sicher ist wie seine Verwendung.

sanitizeLocalUrl ist kein Freifahrtschein

Bis 11.5.50 prüfte die Funktion per Blockliste; Pfade wie /\host wurden fälschlich als lokal akzeptiert (CVE-2026-47347). Der Fix in 11.5.51 ELTS stellt auf eine strikte Freigabeliste um.

Rückgabewert nicht roh weiterverwenden

Selbst ein korrekt geprüftes Ziel sollte serverseitig absolut aufgelöst und gegen erlaubte Hosts/Pfade abgeglichen werden, statt den String direkt als Location zu senden.

felogin & Co.

felogins redirect_url läuft durch denselben Validator. Dass das v11-felogin die Location zusätzlich absolutiert, entschärft den /\-Trick dort zufällig – verlass dich nicht darauf, sondern prüfe Ziele explizit.

Schutzmaßnahmen

Trainings-Lektion abschließen

Lektion abschließen: 9 Fragen beantworten

Anmeldung nötig

Diese Lektion gilt im Training erst als erledigt, wenn du alle 9 Fragen zu diesem Artikel richtig beantwortet hast – von leicht bis knifflig. Dafür brauchst du ein Konto, damit dein Fortschritt gespeichert wird.

Anmelden & Fragen beantworten

Interaktiv üben

In der Lernplattform kannst du diese Schwachstellenklasse an einer echten, isolierten TYPO3-Instanz nachvollziehen:

Weiterlesen

Jetzt interaktiv üben →