Die neu veröffentlichten Versionen von Spring Security enthalten einen Fix für eine Sicherheitslücke in der Zugriffskontrolle – CVE-2023-34034 – die mit einem kritischen NVD-Schweregrad (CVSS 9.8) bewertet wurde. Außerdem wurde sie auch von den Spring-Maintainern mit einem hohen Schweregrad versehen.In Anbetracht der schwerwiegenden potenziellen Auswirkungen der Schwachstelle auf Spring WebFlux-Anwendungen (die Spring Security für die Authentifizierung und Zugriffskontrolle verwenden), der hohen Popularität in der Branche und des Mangels an öffentlichen Informationen über die Details der Ausnutzung, veranlasste diese Sicherheitsbehebung das JFrog Security Research Team dazu, die Schwachstelle zu untersuchen.
Was ist Spring WebFlux?
Das Spring Framework ist ein weit verbreitetes Java-basiertes Anwendungsframework, das eine Infrastrukturunterstützung für die Entwicklung von Java-Anwendungen auf Unternehmensebene bietet.
Spring Security ist ein leistungsstarkes Authentifizierungs- und Zugriffskontroll-Framework und ein Industriestandard für die Absicherung Spring-basierter Anwendungen. Es bietet sowohl Authentifizierung als auch Autorisierung und kann leicht erweitert werden, um individuelle Anforderungen zu erfüllen. Spring WebFlux wurde in Spring 5 als reaktive Programmieralternative zum traditionellen Spring Web MVC Framework eingeführt.
Im Kern ist Spring WebFlux darauf ausgelegt, asynchrone, nicht blockierende und reaktive Programmierparadigmen zu verarbeiten. Es bietet ein reaktives Programmiermodell, das es Entwicklern ermöglicht, skalierbare, reaktionsfähige und belastbare Anwendungen zu erstellen. Anstelle des traditionellen Thread-per-Request-Ansatzes nutzt WebFlux die reaktive Streams-API, die es ermöglicht, mehrere Anforderungen gleichzeitig mit einer kleinen Anzahl von Threads zu verarbeiten.
Hintergrund der Schwachstelle
Am 18. Juli 2023 veröffentlichte Spring Security neue Versionen mit diesem Sicherheitshinweis, der die Aufmerksamkeit der Sicherheitsexperten erregte, da es sich um eine Filterumgehungsschwachstelle handelte. Die Suche im GitHub-Repository von Spring ergab, dass dies der Fix-Commit ist. Die Beschreibung ist im Spring-Advisory jedoch sehr abstrakt gehalten und geht nicht genau darauf ein, welche Spring-Anwendungsfälle von dem Problem betroffen sind.
Proof of Concept
Als Proof of Concept hat das Security Research Team von JFrog eine einfache Spring WebFlux-Anwendung erstellt, die die Rollen User und Admin enthält und eine anfällige Version von Spring Security verwendet. In dieser Anwendung gibt es eine Anmeldeseite und einen Admin-Endpunkt. Wobei „.anyExchange().permitAll()“ den Zugriff auf alle Seiten erlaubt, mit Ausnahme der Admin-Seiten, die durch .pathMatchers(“admin/**”).hasRole(Roles.ADMIN) angewiesen werden.
Aufgrund der Schwachstelle würde die Regel “admin/**” mit keiner URL übereinstimmen, da ihr ein Schrägstrich am Anfang fehlt. So könnte ein Angreifer beispielsweise ungehindert auf die URL “/admin/supershell” zugreifen, ohne tatsächlich ein Administrator zu sein. Unser PoC zeigt, dass diese Seiten trotzdem zugänglich wären. Wenn ein Angreifer Kenntnis von einem Endpunkt hat, der auf diese Weise „gesichert” wurde, ist es ein Leichtes, ohne Authentifizierung auf die privilegierten Endpunkte zuzugreifen.
Wer ist von CVE-2023-34034 betroffen?
Die Sicherheitslücke tritt unter den folgenden Bedingungen auf:
- Die Webanwendung verwendet das Spring WebFlux-Framework (Anwendungen, die ein älteres “Spring MVC”-Framework verwenden, sind nicht betroffen).
- Die Webanwendung verwendet eine anfällige Version von Spring Security. Zum Beispiel 5.6.0.
- Die Webanwendung verwendet URL-Pfadfilterung für die Einstellung von Spring Security-Zugriffsregeln. Das URL-Pfadmuster beginnt NICHT mit einem Schrägstrich (/). Zum Beispiel: pathMatchers(“admin/supershell”). Dies wirkt sich auf eine einzelne Seite aus, in diesem Beispiel auf die Seite admin/supershell. Wenn der URL-Pfad außerdem das Platzhalterzeichen (**) für mehrere Segmente enthält, erhöht dies den Schweregrad der Sicherheitslücke. Zum Beispiel: pathMatchers(“admin/**”). Dies wirkt sich auf alle Seiten unter dem URL-Pfad aus, in diesem Beispiel also auf alle Seiten unter der Admin-Seite.
Abhilfemaßnahmen
Es wird dringend empfohlen, dass Nutzer ihre Spring Security-Version auf eine der folgenden Versionen zu aktualisieren:
- 6.1.2+
- 6.0.5+
- 5.8.5+
- 5.7.10+
- 5.6.12+
Alternativ können Nutzer jedem in Spring Security verwendeten URL-Filter einen führenden Schrägstrich / hinzufügen. Zum Beispiel, indem man pathMatchers(“admin/**”) durch pathMatchers(“/admin/**”) ersetzt. Nach der Durchführung einer internen Analyse wurde bestätigt, dass die JFrog-Plattform nicht anfällig für CVE-2023-34034 ist.
www.jfrog.com