Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cve-2023-34035-mitigations | Kitploit
Strumenti/GitHubGitHub/jzheaux/cve-2023-34035-mitigations
Analisi delle VulnerabilitàAnalisi del CodiceSicurezza WebConfigurazione ErrataApprendimento e FormazioneSicurezza delle API
GitHubjzheaux/cve-2023-34035-mitigations

cve-2023-34035-mitigations

Vedi Repository
413 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Questa repository è un insieme di esempi per dimostrare le configurazioni in cui le applicazioni possono essere vulnerabili a https://spring.io/security/cve-2023-34035[CVE-2023-34035].

Un'applicazione è vulnerabile quando sono vere tutte le seguenti condizioni:

Spring MVC è nel classpath

DispatcherServlet e almeno un'altra servlet sono mappate; una di esse con una mappatura servlet basata sul percorso (ad esempio, /path/**)

L'applicazione usa requestMatchers(String) per fare riferimento agli endpoint la cui mappatura servlet è della forma /path/**

== Esempi

C'è un insieme di esempi che usano Spring Boot e un insieme che non lo usa.

Gli esempi che contengono test che falliscono sono vulnerabili a CVE-2023-34035. Gli esempi i cui test passano non sono vulnerabili.

In tutti i casi, ciascuno di questi esempi contiene lo stesso errore di mitigazione di Spring Security, anche se si noti che tale mitigazione è temporanea in molte circostanze, in attesa del prossimo rilascio di manutenzione.

=== servlet:java-configuration:dispatcher-servlet-path

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/dispatcher-servlet-path[Questo esempio] rappresenta un'applicazione vulnerabile in cui DispatcherServlet è distribuita su /mvc/* invece della / predefinita.

È vulnerabile poiché Spring MVC è nel classpath, DispatcherServlet e almeno un'altra servlet sono mappate -- una di esse con una mappatura servlet basata sul percorso non-root (in questo caso, DispatcherServlet), e l'applicazione usa requestMatchers(String) per proteggere quegli endpoint.

=== servlet:java-configuration:jetty

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/jetty[Questo esempio] rappresenta un'applicazione sicura in cui DispatcherServlet è distribuita su / (la predefinita).

Non è vulnerabile. Sebbene Spring MVC sia nel classpath e DispatcherServlet sia in uso, è distribuita su / e non ci sono mappature servlet basate sul percorso non-root.

=== servlet:java-configuration:other-servlets

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/other-servlets[Questo esempio] rappresenta un'applicazione vulnerabile in cui DispatcherServlet è distribuita insieme a una servlet personalizzata MyServlet.

È vulnerabile poiché Spring MVC è nel classpath, DispatcherServlet e almeno un'altra servlet sono mappate -- una di esse con una mappatura servlet basata sul percorso non-root (in questo caso, MyServlet), e l'applicazione usa requestMatchers(String) per proteggere quegli endpoint.

=== servlet:java-configuration:tomcat

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/tomcat[Questo esempio] rappresenta un'applicazione sicura in cui DispatcherServlet è distribuita su / (la predefinita).

Non è vulnerabile. Sebbene Spring MVC sia nel classpath e DispatcherServlet sia in uso, è distribuita su / e non ci sono mappature servlet basate sul percorso non-root.

=== servlet:java-configuration:two-dispatcher-servlets

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/two-dispatcher-servlets[Questo esempio] rappresenta un'applicazione vulnerabile in cui DispatcherServlet è distribuita insieme a una servlet personalizzata MyServlet.

È vulnerabile poiché Spring MVC è nel classpath, DispatcherServlet e almeno un'altra servlet sono mappate -- una di esse con una mappatura servlet basata sul percorso non-root (in questo caso, una delle due DispatcherServlet), e l'applicazione usa requestMatchers(String) per proteggere quegli endpoint.

=== servlet:spring-boot:java:dispatcher-servlet-path

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/dispatcher-servlet-path[Questo esempio] rappresenta un'applicazione vulnerabile in cui DispatcherServlet è distribuita su /mvc/* invece della / predefinita.

È vulnerabile poiché Spring MVC è nel classpath, DispatcherServlet e almeno un'altra servlet sono mappate -- una di esse con una mappatura servlet basata sul percorso non-root (in questo caso, DispatcherServlet), e l'applicazione usa requestMatchers(String) per proteggere quegli endpoint.

=== servlet:spring-boot:java:jetty

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/jetty[Questo esempio] rappresenta un'applicazione sicura in cui DispatcherServlet è distribuita su / (la predefinita).

Non è vulnerabile. Sebbene Spring MVC sia nel classpath e DispatcherServlet sia in uso, è distribuita su / e non ci sono mappature servlet basate sul percorso non-root.

=== servlet:spring-boot:java:other-servlets

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/other-servlets[Questo esempio] rappresenta un'applicazione vulnerabile in cui DispatcherServlet è distribuita insieme a una servlet personalizzata MyServlet.

È vulnerabile poiché Spring MVC è nel classpath, DispatcherServlet e almeno un'altra servlet sono mappate -- una di esse con una mappatura servlet basata sul percorso non-root (in questo caso, MyServlet), e l'applicazione usa requestMatchers(String) per proteggere quegli endpoint.

=== servlet:spring-boot:java:tomcat

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/tomcat[Questo esempio] rappresenta un'applicazione sicura in cui DispatcherServlet è distribuita su / (la predefinita).

Non è vulnerabile. Sebbene Spring MVC sia nel classpath e DispatcherServlet sia in uso, è distribuita su / e non ci sono mappature servlet basate sul percorso non-root.

=== servlet:spring-boot:java:undertow

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/undertow[Questo esempio] rappresenta un'applicazione sicura in cui DispatcherServlet è distribuita su / (la predefinita).

Non è vulnerabile. Sebbene Spring MVC sia nel classpath e DispatcherServlet sia in uso, è distribuita su / e non ci sono mappature servlet basate sul percorso non-root.

== Mitigazioni

Nel caso in cui si riceva un errore come il seguente:

.Bash [source,bash,role="primary"]

This method cannot decide whether these patterns are Spring MVC patterns or not. If this endpoint is a Spring MVC endpoint, please use requestMatchers(MvcRequestMatcher); otherwise, please use requestMatchers(AntPathRequestMatcher).

[NOTE] Le versioni 5.8.5, 6.0.5, 6.1.2 e 6.2.0-M1 di Spring Security hanno alcuni falsi positivi. Si noti che in molti casi quanto segue è temporaneo, in attesa del rilascio di 5.8.6, 6.0.6, 6.1.3 e 6.2.0-M2.

Come accennato dal messaggio di errore, la mitigazione principale consiste nell'usare un RequestMatcher completo. Questo serve a tenere meglio in considerazione la mappatura servlet.

Ad esempio, se un'applicazione ha una servlet distribuita su /my-servlet/* e autorizza quel traffico in questo modo:

.Java [source,java,role="primary"]

@Bean SecurityFilterChain appSecurity(HttpSecurity http) throws Exception { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers("/my-servlet/").hasRole("USER") .requestMatchers("/spring-mvc-controller/").hasRole("USER") .anyRequest().authenticated() ) // ... return http.build(); }

allora, l'applicazione dovrebbe invece fare:

.Java [source,java,role="primary"]

import static org.springframework.security.web.util.matcher.AntPathRequestMatcher.antMatcher;

@Bean MvcRequestMatcher.Builder mvc(HandlerMappingIntrospector introspector) { return new MvcRequestMatcher.Builder(introspector); }

@Bean SecurityFilterChain appSecurity(HttpSecurity http, MvcRequestMatcher.Builder mvc) throws Exception { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers(antMatcher("/my-servlet/*")).hasRole("USER") .requestMatchers(mvc.pattern("/spring-mvc-controller/**")).hasRole("USER") .anyRequest().authenticated() ) // ... return http.build(); }

Oppure, se DispatcherServlet è distribuita su un percorso diverso, come /spring-mvc/*, allora invece di:

.Java [source,java,role="primary"]

@Bean SecurityFilterChain appSecurity(HttpSecurity http) throws Exception { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers("/spring-mvc/controller/**")).hasRole("USER") .anyRequest().authenticated() ) // ... return http.build(); }

un'applicazione dovrebbe fare:

.Java [source,java,role="primary"]

@Bean MvcRequestMatcher.Builder mvc(HandlerMappingIntrospector introspector) { return new MvcRequestMatcher.Builder(introspector).servletPath("/spring-mvc"); }

@Bean SecurityFilterChain appSecurity(HttpSecurity http, MvcRequestMatcher.Builder mvc) throws Exception { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers(mvc.pattern("/controller/**")).hasRole("USER") .anyRequest().authenticated() ) // ... return http.build(); }

Separare il percorso servlet quando si costruisce un MvcRequestMatcher è importante per garantire che la richiesta venga abbinata correttamente.

== Branch

In questa repository c'è un branch per ogni release minore di Spring Security. Su quel branch c'è un commit per ogni esempio interessato con la mitigazione necessaria.

Ad esempio, sul branch 5.8.x, ci sono otto commit per correggere gli otto esempi che richiedono la mitigazione.

Quando 5.8.6, 6.0.6, 6.1.3 e 6.2.0-M2 verranno rilasciate, verranno apportate modifiche aggiuntive a quei branch in modo che la mitigazione best practice sia chiara.

Scarica lo strumento