Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2023-34035-mitigations | Kitploit
Herramientas/GitHubGitHub/jzheaux/cve-2023-34035-mitigations
Análisis de VulnerabilidadesAnálisis de CódigoSeguridad WebMala ConfiguraciónAprendizaje y EducaciónSeguridad de APIs
GitHubjzheaux/cve-2023-34035-mitigations

cve-2023-34035-mitigations

Ver Repositorio
41hace 3 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Este repositorio es un conjunto de ejemplos para demostrar las configuraciones en las que las aplicaciones pueden ser vulnerables a https://spring.io/security/cve-2023-34035[CVE-2023-34035].

Una aplicación es vulnerable cuando se cumplen todas las siguientes condiciones:

Spring MVC está en el classpath

DispatcherServlet y al menos otro servlet están mapeados; uno de ellos con un mapeo de servlet basado en rutas (por ejemplo, /path/**)

La aplicación utiliza requestMatchers(String) para referirse a endpoints cuyo mapeo de servlet tiene la forma /path/**

== Ejemplos

Hay un conjunto de ejemplos que utilizan Spring Boot y otro que no.

Los ejemplos que contienen pruebas fallidas son vulnerables a CVE-2023-34035. Los ejemplos cuyas pruebas pasan no son vulnerables.

En todos los casos, cada uno de estos ejemplos contiene el mismo error de mitigación de Spring Security, aunque hay que tener en cuenta que dicha mitigación es temporal en muchas circunstancias, a la espera de la siguiente versión de mantenimiento.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/dispatcher-servlet-path[Este ejemplo] representa una aplicación vulnerable en la que DispatcherServlet está desplegado en /mvc/* en lugar de la / por defecto.

Es vulnerable porque Spring MVC está en el classpath, DispatcherServlet y al menos otro servlet están mapeados -- uno de ellos con un mapeo de servlet basado en rutas no raíz (en este caso, DispatcherServlet), y la aplicación utiliza requestMatchers(String) para proteger esos endpoints.

=== servlet:java-configuration:jetty

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/jetty[Este ejemplo] representa una aplicación segura en la que DispatcherServlet está desplegado en / (la opción por defecto).

No es vulnerable. Si bien Spring MVC está en el classpath y DispatcherServlet está en uso, está desplegado en / y no hay mapeos de servlet basados en rutas no raíz.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/other-servlets[Este ejemplo] representa una aplicación vulnerable en la que DispatcherServlet está desplegado junto con un servlet personalizado MyServlet.

Es vulnerable porque Spring MVC está en el classpath, DispatcherServlet y al menos otro servlet están mapeados -- uno de ellos con un mapeo de servlet basado en rutas no raíz (en este caso, MyServlet), y la aplicación utiliza requestMatchers(String) para proteger esos endpoints.

=== servlet:java-configuration:tomcat

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/tomcat[Este ejemplo] representa una aplicación segura en la que DispatcherServlet está desplegado en / (la opción por defecto).

No es vulnerable. Si bien Spring MVC está en el classpath y DispatcherServlet está en uso, está desplegado en / y no hay mapeos de servlet basados en rutas no raíz.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/two-dispatcher-servlets[Este ejemplo] representa una aplicación vulnerable en la que DispatcherServlet está desplegado junto con un servlet personalizado MyServlet.

Es vulnerable porque Spring MVC está en el classpath, DispatcherServlet y al menos otro servlet están mapeados -- uno de ellos con un mapeo de servlet basado en rutas no raíz (en este caso, uno de los dos DispatcherServlets), y la aplicación utiliza requestMatchers(String) para proteger esos endpoints.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/dispatcher-servlet-path[Este ejemplo] representa una aplicación vulnerable en la que DispatcherServlet está desplegado en /mvc/* en lugar de la / por defecto.

Es vulnerable porque Spring MVC está en el classpath, DispatcherServlet y al menos otro servlet están mapeados -- uno de ellos con un mapeo de servlet basado en rutas no raíz (en este caso, DispatcherServlet), y la aplicación utiliza requestMatchers(String) para proteger esos endpoints.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/jetty[Este ejemplo] representa una aplicación segura en la que DispatcherServlet está desplegado en / (la opción por defecto).

No es vulnerable. Si bien Spring MVC está en el classpath y DispatcherServlet está en uso, está desplegado en / y no hay mapeos de servlet basados en rutas no raíz.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/other-servlets[Este ejemplo] representa una aplicación vulnerable en la que DispatcherServlet está desplegado junto con un servlet personalizado MyServlet.

Es vulnerable porque Spring MVC está en el classpath, DispatcherServlet y al menos otro servlet están mapeados -- uno de ellos con un mapeo de servlet basado en rutas no raíz (en este caso, MyServlet), y la aplicación utiliza requestMatchers(String) para proteger esos endpoints.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/tomcat[Este ejemplo] representa una aplicación segura en la que DispatcherServlet está desplegado en / (la opción por defecto).

No es vulnerable. Si bien Spring MVC está en el classpath y DispatcherServlet está en uso, está desplegado en / y no hay mapeos de servlet basados en rutas no raíz.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/undertow[Este ejemplo] representa una aplicación segura en la que DispatcherServlet está desplegado en / (la opción por defecto).

No es vulnerable. Si bien Spring MVC está en el classpath y DispatcherServlet está en uso, está desplegado en / y no hay mapeos de servlet basados en rutas no raíz.

== Mitigaciones

En caso de que obtenga un error como el siguiente:

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

debe seguir sus instrucciones.

[NOTE] Las versiones 5.8.5, 6.0.5, 6.1.2 y 6.2.0-M1 de Spring Security tienen algunos falsos positivos. Tenga en cuenta que en muchos casos lo siguiente es temporal, a la espera del lanzamiento de 5.8.6, 6.0.6, 6.1.3 y 6.2.0-M2.

Como sugiere el mensaje de error, la mitigación principal es utilizar un RequestMatcher completo. Esto permite que el mapeo del servlet se tenga en cuenta con mayor claridad.

Por ejemplo, si una aplicación tiene un servlet desplegado en /my-servlet/* y está autorizando ese tráfico de la siguiente manera:

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

entonces, la aplicación debería hacer lo siguiente en su lugar:

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

O bien, si DispatcherServlet está desplegado en una ruta diferente, como /spring-mvc/*, entonces en lugar 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(); }

la aplicación debería hacer:

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

Separar la ruta del servlet al construir un MvcRequestMatcher es importante para garantizar que la solicitud coincida correctamente.

== Ramas

En este repositorio, hay una rama para cada versión menor de Spring Security. En esa rama, hay un commit para cada ejemplo afectado con la mitigación necesaria.

Por ejemplo, en la rama 5.8.x, hay ocho commits para corregir los ocho ejemplos que requieren mitigación.

Cuando se publiquen 5.8.6, 6.0.6, 6.1.3 y 6.2.0-M2, se realizarán cambios adicionales en esas ramas para que la mitigación de mejores prácticas quede clara.

Descargar herramienta