Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2023-34035-mitigations — Démontre la vulnérabilité CVE-2023-34035 dans Spring Security avec des applications d'exemple vulnérables et corrigées, enseignant la configuration correcte du mappage de servlet et du request matcher. | Kitploit
Outils/GitHubGitHub/jzheaux/cve-2023-34035-mitigations
Analyse des VulnérabilitésAnalyse de CodeSécurité WebMauvaise ConfigurationApprentissage et ÉducationSécurité des API
GitHubjzheaux/cve-2023-34035-mitigations

cve-2023-34035-mitigations

Démontre la vulnérabilité CVE-2023-34035 dans Spring Security avec des applications d'exemple vulnérables et corrigées, enseignant la configuration correcte du mappage de servlet et du request matcher.

Voir le dépôt
413il y a 3 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Ce dépôt est un ensemble d'exemples illustrant les configurations dans lesquelles des applications peuvent être vulnérables à https://spring.io/security/cve-2023-34035[CVE-2023-34035].

Une application est vulnérable lorsque toutes les conditions suivantes sont réunies :

Spring MVC est présent sur le classpath

DispatcherServlet et au moins un autre servlet sont mappés ; l'un d'eux ayant un mappage de servlet basé sur un chemin (par exemple /path/**)

L'application utilise requestMatchers(String) pour faire référence à des points de terminaison dont le mappage de servlet est de la forme /path/**

== Exemples

Il existe un ensemble d'exemples utilisant Spring Boot et un ensemble qui ne l'utilise pas.

Les exemples contenant des tests échouant sont vulnérables à CVE-2023-34035. Les exemples dont les tests réussissent ne sont pas vulnérables.

Dans tous les cas, chacun de ces exemples contient la même erreur d'atténuation de Spring Security, bien qu'une telle atténuation soit temporaire dans de nombreuses circonstances, en attendant la prochaine version de maintenance.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/dispatcher-servlet-path[Cet exemple] représente une application vulnérable où est déployé sur au lieu du par défaut.

DispatcherServlet
/mvc/*
/

Il est vulnérable car Spring MVC est sur le classpath, DispatcherServlet et au moins un autre servlet sont mappés — l'un d'eux avec un mappage de servlet basé sur un chemin non racine (dans ce cas, DispatcherServlet), et l'application utilise requestMatchers(String) pour sécuriser ces points de terminaison.

=== servlet:java-configuration:jetty

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/jetty[Cet exemple] représente une application sûre où DispatcherServlet est déployé sur / (le défaut).

Il n'est pas vulnérable. Bien que Spring MVC soit sur le classpath et que DispatcherServlet soit utilisé, il est déployé sur / et il n'y a pas de mappages de servlet basés sur un chemin non racine.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/other-servlets[Cet exemple] représente une application vulnérable où DispatcherServlet est déployé ainsi qu'un servlet personnalisé MyServlet.

Il est vulnérable car Spring MVC est sur le classpath, DispatcherServlet et au moins un autre servlet sont mappés — l'un d'eux avec un mappage de servlet basé sur un chemin non racine (dans ce cas, MyServlet), et l'application utilise requestMatchers(String) pour sécuriser ces points de terminaison.

=== servlet:java-configuration:tomcat

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/tomcat[Cet exemple] représente une application sûre où DispatcherServlet est déployé sur / (le défaut).

Il n'est pas vulnérable. Bien que Spring MVC soit sur le classpath et que DispatcherServlet soit utilisé, il est déployé sur / et il n'y a pas de mappages de servlet basés sur un chemin non racine.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/two-dispatcher-servlets[Cet exemple] représente une application vulnérable où DispatcherServlet est déployé ainsi qu'un servlet personnalisé MyServlet.

Il est vulnérable car Spring MVC est sur le classpath, DispatcherServlet et au moins un autre servlet sont mappés — l'un d'eux avec un mappage de servlet basé sur un chemin non racine (dans ce cas, l'un des deux DispatcherServlet), et l'application utilise requestMatchers(String) pour sécuriser ces points de terminaison.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/dispatcher-servlet-path[Cet exemple] représente une application vulnérable où DispatcherServlet est déployé sur /mvc/* au lieu du / par défaut.

Il est vulnérable car Spring MVC est sur le classpath, DispatcherServlet et au moins un autre servlet sont mappés — l'un d'eux avec un mappage de servlet basé sur un chemin non racine (dans ce cas, DispatcherServlet), et l'application utilise requestMatchers(String) pour sécuriser ces points de terminaison.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/jetty[Cet exemple] représente une application sûre où DispatcherServlet est déployé sur / (le défaut).

Il n'est pas vulnérable. Bien que Spring MVC soit sur le classpath et que DispatcherServlet soit utilisé, il est déployé sur / et il n'y a pas de mappages de servlet basés sur un chemin non racine.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/other-servlets[Cet exemple] représente une application vulnérable où DispatcherServlet est déployé ainsi qu'un servlet personnalisé MyServlet.

Il est vulnérable car Spring MVC est sur le classpath, DispatcherServlet et au moins un autre servlet sont mappés — l'un d'eux avec un mappage de servlet basé sur un chemin non racine (dans ce cas, MyServlet), et l'application utilise requestMatchers(String) pour sécuriser ces points de terminaison.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/tomcat[Cet exemple] représente une application sûre où DispatcherServlet est déployé sur / (le défaut).

Il n'est pas vulnérable. Bien que Spring MVC soit sur le classpath et que DispatcherServlet soit utilisé, il est déployé sur / et il n'y a pas de mappages de servlet basés sur un chemin non racine.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/undertow[Cet exemple] représente une application sûre où DispatcherServlet est déployé sur / (le défaut).

Il n'est pas vulnérable. Bien que Spring MVC soit sur le classpath et que DispatcherServlet soit utilisé, il est déployé sur / et il n'y a pas de mappages de servlet basés sur un chemin non racine.

== Atténuations

Dans le cas où vous obtenez une erreur comme celle-ci :

.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).

vous devez la suivre.

[NOTE] Les versions 5.8.5, 6.0.5, 6.1.2 et 6.2.0-M1 de Spring Security présentent certains faux positifs. Maintenant, dans de nombreux cas, ce qui suit est temporaire, en attendant la publication de 5.8.6, 6.0.6, 6.1.3 et 6.2.0-M2.

Comme le suggère le message d'erreur, l'atténuation principale consiste à utiliser un RequestMatcher complet. Cela afin que le mappage de servlet puisse être pris en compte plus clairement.

Par exemple, si une application a un servlet déployé sur /my-servlet/* et autorise ce trafic comme ceci :

.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(); }

alors, l'application devrait plutôt faire :

.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(); }

Ou, si DispatcherServlet est déployé sur un chemin différent, comme /spring-mvc/*, alors au lieu de :

.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(); }

une application devrait faire :

.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(); }

Séparer le chemin du servlet lors de la construction d'un MvcRequestMatcher est important pour s'assurer que la requête est correctement appariée.

== Branches

Dans ce dépôt, il y a une branche pour chaque version mineure de Spring Security. Sur cette branche, il y a un commit pour chaque exemple concerné avec l'atténuation nécessaire.

Par exemple, sur la branche 5.8.x, il y a huit commits pour réparer les huit exemples qui nécessitent une atténuation.

Lorsque 5.8.6, 6.0.6, 6.1.3 et 6.2.0-M2 seront publiés, des modifications supplémentaires seront apportées à ces branches afin que l'atténuation recommandée soit claire.

Télécharger l’outil