
Minimaler Proof-of-Concept für den Open Redirect im Spring Framework UrlHandlerFilter (CVE-2026-47883), der demonstriert, wie manipulierte Doppel-Slash-Anfragen angreiferkontrollierte Location-Header erzeugen.
Dieses Repository ist ein minimaler reproduzierbarer PoC für CVE-2026-47883, veröffentlicht im offiziellen Spring-Sicherheitshinweis.
Spring Framework Open Redirect in UrlHandlerFilter5.4 (AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N)CWE-601 — URL Redirection to Untrusted Site (Open Redirect)Wird der UrlHandlerFilter des Spring Frameworks mit einem sehr breiten Muster und im Redirect-Modus konfiguriert, kann ein Location-Header erzeugt werden, der auf einen externen Origin verweist und so einen Open Redirect ermöglicht. Der offizielle Spring-Hinweis nennt sowohl die Servlet- als auch die WebFlux-Variante des Filters als betroffen.
Im Servlet-Pfad dieses PoC wird der Redirect-Ort aus der Request-URI nach dem Entfernen des abschließenden Slash im Antwortheader verwendet.
String location = trimTrailingSlash(request.getRequestURI());
response.setHeader(HttpHeaders.LOCATION, location);
Wenn die rohe Request-URI //attacker.example/ lautet, ist das Ergebnis //attacker.example. Gemäß RFC 3986 §4.2 ist //attacker.example eine Network-Path-Reference; der Browser kann sie daher als externe Adresse unter Beibehaltung des aktuellen Schemas interpretieren (z. B. https://attacker.example).
Dieser PoC setzt Folgendes voraus:
UrlHandlerFilter ist im Redirect-Modus registriert./** ist angewendet.// beginnt, bis zum Server übertragen.UrlHandlerFilter.trailingSlashHandler("/**")
.redirect(HttpStatus.PERMANENT_REDIRECT)
.build();
Betroffene Artefakte laut offiziellem Hinweis:
org.springframework:spring-webmvcorg.springframework:spring-webfluxBetroffene Versionen:
7.0.0 - 7.0.86.2.0 - 6.2.19Behobene Versionen:
| Behobene Version | Verfügbarkeit |
|---|---|
7.0.9 | OSS |
7.0.8.1 | Nur Enterprise Support |
6.2.20 | Nur Enterprise Support |
UrlHandlerFilterBootServletIntegrationTest (Hauptreproduktion)Startet eine echte Spring-Boot-Anwendung mit eingebettetem Tomcat und registriert den folgenden Filter.
UrlHandlerFilter.trailingSlashHandler("/**")
.redirect(HttpStatus.PERMANENT_REDIRECT)
.build();
Der HTTP-Client sendet die Anfrage über einen rohen TCP-Socket, damit der //-Pfad nicht vorab normalisiert wird.
embeddedServletContainerEmitsNetworkPathReferenceForDoubleSlashPath
GET //attacker.example/ HTTP/1.1.308 Permanent Redirect und Location: //attacker.example.embeddedServletContainerKeepsExpectedSameOriginRelativeLocationForOrdinaryPath
GET /account/ HTTP/1.1.Location: /account erhalten bleibt.UrlHandlerFilterOpenRedirectTest (Hilfstest)Prüft die Servlet-Filter-API direkt mit Mock-Objekten und bestätigt die normale Pfad-Kontrollgruppe.
Im reaktiven Hilfstest wird geprüft, dass eine bestimmte, mit MockServerHttpRequest erzeugte URI zu /attacker.example normalisiert wird. Dies ist jedoch keine End-to-End-Reproduktion mit rohem WebFlux-Request-Target und bedeutet nicht, dass WebFlux nicht betroffen ist. Der offizielle Spring-Hinweis nennt sowohl Spring MVC als auch Spring WebFlux als betroffen.
Windows:
.\mvnw.cmd test
macOS/Linux:
./mvnw test
Erwartete Ergebnisse mit der anfälligen Version:
UrlHandlerFilterBootServletIntegrationTest: Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
UrlHandlerFilterOpenRedirectTest: Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
Ein erfolgreicher Test bedeutet, dass das anfällige Verhalten reproduziert wurde. Im Hauptintegrationstest erzeugt die konstruierte rohe Anfrage einen Location-Wert, der als externer Origin aufgelöst werden kann, während normale Anfragen den relativen Same-Origin-Pfad beibehalten.
Dieses Repository verwendet die folgende Kombination:
Spring Boot 3.5.14
Spring Framework 6.2.18
Apache Tomcat 10.1.54
Java 17+
Spring Boot und Tomcat bilden die PoC-Ausführungsumgebung; das offiziell betroffene Produkt ist das Spring Framework. Die im PoC verwendete Version 6.2.18 des Spring Frameworks liegt im offiziell betroffenen Bereich 6.2.0 - 6.2.19.
Ein Angreifer kann Nutzer über eine URL einer vertrauenswürdigen Anwendung dazu verleiten, auf eine externe Website weitergeleitet zu werden. Dies kann für Phishing, die Ausnutzung von Vertrauensbeziehungen und nachfolgende Szenarien zur Erbeutung von Anmeldedaten verwendet werden.
Der offizielle CVSS-Vektor erfordert keine Vorab-Berechtigungen, aber Benutzerinteraktion. Vertraulichkeit und Integrität werden als Low, Verfügbarkeit als None bewertet.
Gemäß der offiziellen Spring-Empfehlung sollte auf die zum jeweiligen Support-Kanal passende behobene Version aktualisiert werden. Der offizielle Hinweis stellt klar, dass nach dem Upgrade keine weiteren Maßnahmen erforderlich sind.
Der offizielle Spring-Hinweis nennt:
@daehyuh)