Laravel Reflected XSS via Route- und Request-Parameter in Debug-Mode Error Page
Der beliebte PHP Framework Laravel ist in den Versionen zwischen 11.9.0 und 11.35.1 von zwei kritischen Reflected Cross-Site Scripting (XSS)-Schwachstellen betroffen. Beide Schwachstellen treten im Debug-Modus (APP_DEBUG=true) auf, wenn ein HTTP-Fehler (5XX) generiert wird. Dabei werden entweder Route-Parameter oder Request-Parameter unzureichend encoded und direkt in die Fehlerseite eingebettet, was es Angreifern ermöglicht, schadhaften JavaScript-Code in den Browser des Benutzers einzuschleusen.
1. Laravel Reflected XSS via Route Parameter in Debug-Mode Error Page
- Identifier: SBA-ADV-20241209-02
- Typ: Cross-Site Scripting
- Betroffene Versionen: 11.9.0 bis 11.35.1
- Behoben in Version: 11.36.0
- CVE-ID: CVE-2024-13919
- CVSS Score: 8.0 (High)
- Beschreibung:
Im Debug-Modus wird bei Fehlern (HTTP-Fehler 5XX) eine Fehlerseite generiert, die Details über die Anfrage enthält. Hierbei werden Route-Parameter, die über die URL übermittelt werden, ohne ausreichende HTML-Encoding in das HTML eingebettet. Ein Beispiel zeigt, wie unsicher eingebettete Werte mittels der Blade-Syntax{!! … !!}direkt in die Seite integriert werden. - Proof of Concept:
Ein vorbereiteter Link wiehttp://localhost:8000/poc-route/%3Cimg%20src=''%20onerror='alert(1)'%3Elöst eine Division-by-Zero aus, was zu einem 500-Fehler führt. Die generierte Fehlerseite enthält das<img>-Tag ohne Encoding, wodurch der Browser das Tag interpretiert und das JavaScript ausführt. - Empfohlene Gegenmaßnahmen:
- Upgrade auf Version 11.36.0 oder höher
- In Produktionsumgebungen den Debug-Modus deaktivieren (APP_DEBUG=false)
2. Laravel Reflected XSS via Request Parameter in Debug-Mode Error Page
- Identifier: SBA-ADV-20241209-01
- Typ: Cross-Site Scripting
- Betroffene Versionen: 11.9.0 bis 11.35.1
- Behoben in Version: 11.36.0
- CVE-ID: CVE-2024-13918
- CVSS Score: 8.0 (High)
- Beschreibung:
Auch hier wird im Debug-Modus eine Fehlerseite angezeigt, wenn ein HTTP-Fehler (5XX) auftritt. Im Unterschied zum ersten Fall werden jedoch Request-Parameter (sowohl aus der URL als auch aus dem Request-Body) ohne ausreichende Encodierung eingebettet. Der entsprechende Code-Snippet zeigt, wie Daten mittels{!! $exception->requestBody() ?: 'No body data' !!}in das HTML integriert werden, ohne die üblichen Sicherheitsvorkehrungen zu nutzen. - Proof of Concept:
Ein Angreifer kann durch den Aufruf des Linkshttp://localhost:8000/poc-url?payload=<script>alert(1)</script>einen Fehler provozieren. Die generierte Fehlerseite zeigt den unsicher eingebetteten Request-Parameterpayload, der vom Browser als HTML interpretiert und somit das eingebettete JavaScript (alert(1)) ausführt. - Empfohlene Gegenmaßnahmen:
- Upgrade auf Version 11.36.0 oder höher
- Sicherstellen, dass in Produktionsumgebungen der Debug-Modus deaktiviert ist (APP_DEBUG=false)