
Ein Projekt, das eine App demonstriert, die anfällig für die Autorisierungsumgehung von Spring Security CVE-2022-31692 ist.
Eine einfache Spring Boot Anwendung, die eine Konfiguration demonstriert, die anfällig für CVE-2022-31692 ist.
Diese Schwachstelle könnte aufgrund ihres Schweregrads Aufmerksamkeit erregen – sie hat einen CVSS 3.x Basisscore von 9.8, da sie eine Authentifizierungsumgehung ermöglicht. Der Zweck dieses Projekts ist es, die im Advisory beschriebenen Bedingungen zu demonstrieren, die zur Anwendbarkeit der Schwachstelle führen.
AuthorizationFilter entweder manuell oder über die Methode authorizeHttpRequests().FilterChainProxy, um auf Forward- und/oder Include-Anfragen anzuwenden (z.B. spring.security.filter.dispatcher-types = request, error, async, forward, include).authorizeHttpRequests().shouldFilterAllDispatcherTypes(true)Als Referenz: Ich bin mir ziemlich sicher, dass dieser der Commit ist, der die Schwachstelle behebt.
Die Anwendung hat drei URLs:
/ Die Indexseite/admin Eine Admin-Seite, die erfordert, dass der Benutzer eine Basic-Authentifizierung bereitstellt (Zugangsdaten "user"/"pass") und die Rolle ROLE_ADMIN zugewiesen bekommt/forward Eine serverseitige Weiterleitung zur Admin-SeiteZugriffskontrollen werden über authorizeHttpRequests() in der SecurityConfig-Klasse festgelegt.
.authorizeHttpRequests((authz) -> authz
.antMatchers("/").permitAll()
.antMatchers("/forward").permitAll()
.antMatchers("/admin").hasAuthority("ROLE_ADMIN")
.shouldFilterAllDispatcherTypes(true)
)
Benutzer greift auf / zu und ist nicht authentifiziert (dank permitAll())
Benutzer greift auf /admin zu. Sie stellen keine Authentifizierung bereit, und die Anfrage wird abgelehnt (401 Nicht autorisiert).
Benutzer greift auf /admin zu. Sie stellen eine gültige Authentifizierung bereit, aber die Anfrage wird dennoch abgelehnt (403 Nicht autorisiert), da sie nicht die erforderliche Rolle .hasAuthority("ROLE_ADMIN") besitzen.
Benutzer greift auf /forward zu. Ihre Anfrage durchläuft die Sicherheitsfilterkette für GET /forward, die als gültig durchgelassen wird (dank permitAll()). Der Controller verarbeitet die Anfrage und gibt forward:/admin an den Dispatcher zurück. Gemäß den Einstellungen von spring.security.filter.dispatcher-types und .shouldFilterAllDispatcherTypes(true) handelt es sich um einen FORWARD-Typ, der erneut durch die Filterkette geleitet werden sollte. Dieser zweite Durchlauf durch den Filter führt dazu, dass die Anfrage abgelehnt wird (wiederum dank hasAuthority("ROLE_ADMIN")).
Benutzer greift auf /forward zu, die Anfrage wird einmal durch die Filterkette geleitet und als gültig durchgelassen. Die Weiterleitung wird verarbeitet, aber anstatt erneut durch die Kette geleitet zu werden, wird sie einfach als gültig durchgelassen, und die Admin-Seite wird zurückgegeben.