So verhindern Sie Open-Redirect-Schwachstellen in Laravel
Kevin Kimani
27. Dezember 2023
0 Min. LesezeitEine Open-Redirect-Schwachstelle entsteht, wenn eine Website zulässt, dass vom Benutzer bereitgestellte Eingaben das Ziel einer Weiterleitung beeinflussen, ohne die erforderlichen Validierungs- oder Bereinigungsmaßnahmen umzusetzen. Um diese Schwachstelle auszunutzen, kann ein Angreifer Benutzern einen scheinbar vertrauenswürdigen Link senden, der sie nach dem Anklicken auf eine schädliche Website weiterleitet. Dies kann zu Phishing-Angriffen oder anderen böswilligen Aktivitäten führen. In Laravel tritt dies häufig auf, wenn Entwickler Weiterleitungsziele nicht validieren oder auf eine Allowlist setzen.
In diesem Artikel erfahren Sie mehr über Open-Redirect-Schwachstellen und wie Sie diese in Laravel verhindern können. Außerdem erfahren Sie, wie Sie mit Snyk diese Schwachstelle in Ihrem Code und Ihren Abhängigkeiten erkennen.
Was ist eine Open-Redirect-Schwachstelle in Laravel?
Open-Redirect-Schwachstellen treten auf, wenn Webanwendungen externen Benutzern erlauben, eine URL festzulegen, zu der sie weitergeleitet werden. Dies geschieht häufig nach einer vom Benutzer ausgelösten Aktion, etwa dem Anklicken eines Links oder einer Schaltfläche. Diese vom Benutzer angegebene URL ist üblicherweise als Abfrageparameter in der URL der Anwendung enthalten.
Sehen Sie sich beispielsweise eine anfällige URL wie diese an: http://example.com/redirect?url=http://malicious-site.com
Ohne geeignete Validierungs- und Bereinigungsmaßnahmen kann die Laravel-Weiterleitungsmethode Benutzer versehentlich an die angegebene schädliche Website weiterleiten.
Erstellen einer anfälligen Anwendung
Um besser zu verstehen, wie eine Open-Redirect-Schwachstelle funktioniert, erstellen wir eine einfache anfällige Anwendung. Anschließend implementieren Sie Methoden, um diese Schwachstelle zu verhindern.
Für die Anleitung benötigen Sie Folgendes:
Die Erweiterungen
php-xmlundphp-curl, installiert auf Ihrem lokalen Rechner.Node.js und npm, installiert auf Ihrem lokalen Rechner.
Einen Webbrowser und einen Code-Editor. In dieser Anleitung verwenden wir Visual Studio (VS) Code.
Der gesamte Code für dieses Tutorial ist in diesem GitHub-Repository verfügbar.
Sobald alles bereit ist, können Sie mit der Erstellung der Anwendung beginnen.
Wechseln Sie auf Ihrem lokalen Rechner in ein geeignetes Verzeichnis, öffnen Sie den Ordner in einem Terminal und führen Sie die folgenden Befehle aus, um das Laravel-Installationsprogramm global über Composer zu installieren und ein neues Laravel-Projekt zu erstellen:
Falls dieser Befehl nicht funktioniert, erstellen Sie mit composer create-project laravel/laravel open-redirect-vulnerability-demo ein neues Projekt.
Wählen Sie in den angezeigten Terminal-Eingabeaufforderungen die folgenden Optionen aus:
Möchten Sie ein Starter-Kit installieren?: Kein Starter-Kit
Welches Test-Framework bevorzugen Sie?: PHPUnit
Möchten Sie ein Git-Repository initialisieren?: Nein
Welche Datenbank wird Ihre Anwendung verwenden?: SQLite
Nachdem Sie die Anwendung erstellt haben, öffnen Sie das Verzeichnis open-redirect-vulnerability-demo in Ihrem Code-Editor. Um anschließend eine Route mit einer Open-Redirect-Schwachstelle zu erstellen, öffnen Sie die Datei routes/web.php und ersetzen Sie die Route / durch den folgenden Code:
Vergewissern Sie sich, dass die folgende use-Anweisung am Anfang der Datei web.php steht:
Um zu veranschaulichen, wie die Open-Redirect-Schwachstelle funktioniert, starten Sie den Server mit dem Befehl php artisan serve und öffnen Sie Ihren Webbrowser. In diesem Szenario ist https://www.google.com/ die schädliche URL, zu der ein Angreifer den Benutzer weiterleiten möchte.
Rufen Sie im Browser http://127.0.0.1:8000/vulnerable?redirect=https://www.google.com/ auf. Sie werden dann zu https://www.google.com/ weitergeleitet.
Die von Ihnen erstellte Route /vulnerable ist aufgrund fehlender Eingabevalidierung und -bereinigung anfällig für eine Open-Redirect-Schwachstelle. Konkret ruft sie den Weiterleitungsparameter aus der URL ab und leitet zur angegebenen Webseite weiter, ohne zu überprüfen, ob die URL sicher ist oder zur Domain der Anwendung gehört. Da der Code Benutzer blind an die im Weiterleitungsparameter angegebene URL weiterleitet, lässt sich die URL manipulieren, um Benutzer dazu zu verleiten, Phishing-Websites zu besuchen, Malware herunterzuladen oder sich an anderen schädlichen Aktivitäten zu beteiligen.
In diesem Fall hätte der Angreifer eine Kopie der echten Website erstellen können (d. h. http://127.0.0.1:8000). Wenn die Seite geladen wird, könnte der Benutzer denken, er befinde sich auf der richtigen Website, obwohl das nicht der Fall ist. Meldet sich der Benutzer auf der schädlichen Website an, gibt er seine Zugangsdaten unwissentlich an den Angreifer weiter.
So verhindern Sie eine Open-Redirect-Schwachstelle in Laravel
Open-Redirect-Schwachstellen sind ein häufig genutzter Angriffsvektor, der sich verhindern lässt. Die folgenden Best Practices können dabei helfen:
Feste Weiterleitungen verwenden
Mit festen Weiterleitungen stellen Sie sicher, dass Benutzer nur zu vertrauenswürdigen, vorab festgelegten Zielen innerhalb der Anwendung weitergeleitet werden können. Diese Vorgehensweise mindert das Risiko von Open-Redirect-Schwachstellen wirksam und bietet einen robusten Schutz, der implementiert werden sollte.
Um feste Weiterleitungen im aktuellen Code zu implementieren, ersetzen Sie die Route /vulnerable durch Folgendes:
Mit diesem Code beschränken Sie alle Weiterleitungen auf bestimmte, vertrauenswürdige Routen (d. h. interne Routen) innerhalb Ihrer Laravel-Anwendung. So verhindern Sie, dass Angreifer schädliche URLs erstellen, die zu externen Zielen führen. Sie können die Korrektur testen, indem Sie versuchen, die zuvor verwendete schädliche URL aufzurufen: http://127.0.0.1:8000/vulnerable?redirect=https://www.google.com/.
Eine Allowlist möglicher Weiterleitungen
Eine weitere Möglichkeit, Open-Redirect-Schwachstellen zu verhindern, besteht darin, eine Liste vertrauenswürdiger Ziele festzulegen. Diese Vorsichtsmaßnahme trägt dazu bei, dass Weiterleitungen nur zu zugelassenen URLs erfolgen.
Um diese Strategie in diesem Laravel-Projekt umzusetzen, ersetzen Sie die Route /vulnerable durch den folgenden Code:
In diesem Code gehen Sie davon aus, dass https://snyk.io/ eine vertrauenswürdige Weiterleitungs-URL ist. Der Wert des Weiterleitungsparameters in der URL wird mit dem Array $whitelistedDestinations abgeglichen. Stimmt er mit einem der vertrauenswürdigen Ziele überein, erfolgt die Weiterleitung. Andernfalls leitet die Anwendung auf eine sichere Standardseite weiter.
Um diese Methode zu testen, rufen Sie in Ihrem Browser http://127.0.0.1:8000/vulnerable?redirect=https://www.google.com auf. Sie werden automatisch zur Startseite der Laravel-Anwendung weitergeleitet, da https://www.google.com nicht im Array $whitelistedDestinations enthalten ist. Rufen Sie hingegen http://127.0.0.1:8000/vulnerable?redirect=https://snyk.io/ auf, werden Sie zu https://snyk.io/ weitergeleitet, da diese URL im Array $whitelistedDestinations enthalten ist.
Weiterleitungen zu anderen Domains unterbinden
Wenn Ihre Anwendung keine Weiterleitungen zu anderen Domains zulässt, werden Benutzer ausschließlich innerhalb der Anwendungsdomain weitergeleitet. Alternativ können sie angemessen informiert werden und bei möglichen Weiterleitungen außerhalb der vertrauenswürdigen Umgebung Vorsicht walten lassen. Diese Vorgehensweise stärkt die allgemeine Sicherheit und das Vertrauen der Benutzer.
Um diese Strategie in diesem Laravel-Projekt umzusetzen, ersetzen Sie die Route /vulnerable durch den folgenden Code:
Fügen Sie außerdem die folgende use-Anweisung am Anfang der Datei web.php ein:
Dieser Code definiert eine Route, die Benutzereingaben in Form einer URL entgegennimmt. Fehlt das Protokoll, wird http:// vorangestellt. Anschließend wird überprüft, ob der Host der URL localhost ist. Ist das der Fall, lässt der Code die Weiterleitung zu. Andernfalls gibt er eine Antwort 403 Forbidden zurück, unterbindet die Weiterleitung zu einer anderen Domain und weist mit einer Meldung darauf hin, dass die Weiterleitung zu einer anderen Domain nicht zulässig ist.
Open-Redirect-Schwachstellen mit einer Snyk-IDE-Erweiterung erkennen
Wenn Sie nach einer nahtlosen Lösung suchen, um Open-Redirect-Schwachstellen zu erkennen, empfiehlt sich eine Snyk-IDE-Sicherheitserweiterung, beispielsweise die Snyk-Erweiterung für Visual Studio Code. Dieses Tool erkennt Open-Redirect-Schwachstellen in Ihrem Code, informiert Sie über Schwachstellen und deren Sicherheitsstufe, listet Best Practices zu ihrer Vermeidung auf und stellt Codebeispiele bereit, mit denen Sie die Schwachstellen beheben können.
Der Einstieg in die Snyk-Erweiterung für Visual Studio Code ist ganz einfach. Beginnen Sie mit der Installation, Konfiguration und Authentifizierung der Erweiterung.
Um die Erweiterung in Aktion zu sehen, verwenden Sie den gleichen anfälligen Code wie zuvor. Öffnen Sie die Datei routes/web.php und ersetzen Sie die Route /vulnerable durch Folgendes:
Speichern Sie die Datei und wählen Sie Snyk in der Seitenleiste von VS Code aus. Klicken Sie unter „Code-Sicherheit“ auf die Schaltfläche Erneut scannen, falls der Scan nicht bereits läuft:

Nach Abschluss des Scans wird eine Liste mit Schwachstellen angezeigt. Klappen Sie in den Ergebnissen web.php auf und wählen Sie Open Redirect aus. Die Snyk-Erweiterung zeigt Ihnen weitere Details zur Schwachstelle und erklärt, wie Sie sie beheben können:

Die Snyk-Erweiterung hebt den anfälligen Code auch direkt im Code hervor. Wenn Sie den Mauszeiger darüber bewegen, erhalten Sie weitere Informationen zur Schwachstelle:

Diese Erweiterung bietet außerdem Open-Source-Sicherheit, ein Tool, mit dem Sie Schwachstellen in den Open-Source-Bibliotheken Ihrer Anwendung finden und beheben können. Findet Snyk Schwachstellen in Ihren Open-Source-Bibliotheken, darunter auch Open-Redirect-Schwachstellen, werden die Ergebnisse im Anzeigefenster der Snyk-Erweiterung dargestellt:

Fazit
In diesem Artikel haben Sie alles über Open-Redirect-Schwachstellen in Laravel-Anwendungen und die damit verbundenen Risiken erfahren, darunter Phishing-Angriffe und die Verbreitung von Malware. Außerdem haben Sie gelernt, wie Sie diese Schwachstelle beheben können, indem Sie feste Weiterleitungen implementieren, zulässige Ziele auf eine Allowlist setzen und Weiterleitungen zu externen Domains unterbinden. Diese Strategien erhöhen die Sicherheit Ihrer Laravel-Anwendungen erheblich, da sie sicherstellen, dass Benutzer nur zu vertrauenswürdigen und vordefinierten Zielen weitergeleitet werden.
Wenn Sie die Sicherheit noch weiter erhöhen möchten, empfehlen sich Snyk-IDE-Erweiterungen. Mit Snyk können Sie Ihre Laravel-Anwendungen noch besser vor verschiedensten Schwachstellen schützen, einschließlich Open Redirects.
Die Snyk-Erweiterung für Visual Studio Code scannt Ihre Codebasis, identifiziert Schwachstellen und liefert konkrete Erkenntnisse. So können Entwickler potenzielle Bedrohungen erkennen, bevor sie die Produktionsumgebung erreichen. Mit der umfassenden Palette an Sicherheitslösungen von Snyk können Entwickler ihre Laravel-Anwendungen proaktiv schützen, für robusten Schutz sorgen und die Sicherheitslage ihrer Projekte insgesamt verbessern.
Starten Sie mit Capture-the-Flag
Erfahren Sie, wie Sie Capture-the-Flag-Herausforderungen lösen – mit unserem jederzeit verfügbaren virtuellen 101-Workshop.



