Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/jzheaux/cve-2023-34035-mitigations
Análise de VulnerabilidadesAnálise de CódigoSegurança WebConfiguração IncorretaAprendizado e EducaçãoSegurança de API
GitHubjzheaux/cve-2023-34035-mitigations

cve-2023-34035-mitigations

Demonstra a vulnerabilidade CVE-2023-34035 no Spring Security com aplicações de exemplo vulneráveis e mitigadas, ensinando a configuração correta de mapeamento de servlet e correspondente de requisições.

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver Repositório
41há 3 anosAinda não revisado

Este repositório é um conjunto de exemplos para demonstrar as configurações nas quais aplicações podem ser vulneráveis a https://spring.io/security/cve-2023-34035[CVE-2023-34035].

Uma aplicação é vulnerável quando todas as seguintes condições são verdadeiras:

Spring MVC está no classpath

DispatcherServlet e pelo menos um outro servlet estão mapeados; um deles tendo um mapeamento de servlet baseado em caminho (por exemplo, /path/**)

A aplicação usa requestMatchers(String) para referir-se a endpoints cujo mapeamento de servlet é da forma /path/**

== Amostras

Há um conjunto de amostras que usam Spring Boot e um conjunto que não usam.

As amostras que contêm testes falhando são vulneráveis ao CVE-2023-34035. As amostras cujos testes passam não são vulneráveis.

Em todos os casos, cada uma dessas amostras contém o mesmo erro de mitigação do Spring Security, embora note-se que tal mitigação é temporária em muitas circunstâncias, até o próximo lançamento de manutenção.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/dispatcher-servlet-path[Esta amostra] representa uma aplicação vulnerável onde DispatcherServlet é implantado em /mvc/* em vez do padrão /.

É vulnerável pois Spring MVC está no classpath, DispatcherServlet e pelo menos um outro servlet estão mapeados — um deles com um mapeamento de servlet baseado em caminho não raiz (neste caso, DispatcherServlet), e a aplicação usa requestMatchers(String) para proteger esses endpoints.

=== servlet:java-configuration:jetty

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/jetty[Esta amostra] representa uma aplicação segura onde DispatcherServlet é implantado em / (o padrão).

Não é vulnerável. Embora Spring MVC esteja no classpath e DispatcherServlet esteja em uso, ele é implantado em / e não há mapeamentos de servlet baseados em caminho não raiz.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/other-servlets[Esta amostra] representa uma aplicação vulnerável onde DispatcherServlet é implantado, bem como um servlet personalizado MyServlet.

É vulnerável pois Spring MVC está no classpath, DispatcherServlet e pelo menos um outro servlet estão mapeados — um deles com um mapeamento de servlet baseado em caminho não raiz (neste caso, MyServlet), e a aplicação usa requestMatchers(String) para proteger esses endpoints.

=== servlet:java-configuration:tomcat

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/tomcat[Esta amostra] representa uma aplicação segura onde DispatcherServlet é implantado em / (o padrão).

Não é vulnerável. Embora Spring MVC esteja no classpath e DispatcherServlet esteja em uso, ele é implantado em / e não há mapeamentos de servlet baseados em caminho não raiz.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/two-dispatcher-servlets[Esta amostra] representa uma aplicação vulnerável onde DispatcherServlet é implantado, bem como um servlet personalizado MyServlet.

É vulnerável pois Spring MVC está no classpath, DispatcherServlet e pelo menos um outro servlet estão mapeados — um deles com um mapeamento de servlet baseado em caminho não raiz (neste caso, um dos dois DispatcherServlets), e a aplicação usa requestMatchers(String) para proteger esses 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[Esta amostra] representa uma aplicação vulnerável onde DispatcherServlet é implantado em /mvc/* em vez do padrão /.

É vulnerável pois Spring MVC está no classpath, DispatcherServlet e pelo menos um outro servlet estão mapeados — um deles com um mapeamento de servlet baseado em caminho não raiz (neste caso, DispatcherServlet), e a aplicação usa requestMatchers(String) para proteger esses endpoints.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/jetty[Esta amostra] representa uma aplicação segura onde DispatcherServlet é implantado em / (o padrão).

Não é vulnerável. Embora Spring MVC esteja no classpath e DispatcherServlet esteja em uso, ele é implantado em / e não há mapeamentos de servlet baseados em caminho não raiz.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/other-servlets[Esta amostra] representa uma aplicação vulnerável onde DispatcherServlet é implantado, bem como um servlet personalizado MyServlet.

É vulnerável pois Spring MVC está no classpath, DispatcherServlet e pelo menos um outro servlet estão mapeados — um deles com um mapeamento de servlet baseado em caminho não raiz (neste caso, MyServlet), e a aplicação usa requestMatchers(String) para proteger esses endpoints.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/tomcat[Esta amostra] representa uma aplicação segura onde DispatcherServlet é implantado em / (o padrão).

Não é vulnerável. Embora Spring MVC esteja no classpath e DispatcherServlet esteja em uso, ele é implantado em / e não há mapeamentos de servlet baseados em caminho não raiz.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/undertow[Esta amostra] representa uma aplicação segura onde DispatcherServlet é implantado em / (o padrão).

Não é vulnerável. Embora Spring MVC esteja no classpath e DispatcherServlet esteja em uso, ele é implantado em / e não há mapeamentos de servlet baseados em caminho não raiz.

== Mitigações

No caso de você obter um erro como o seguinte:

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

você deve segui-lo.

[NOTE] As versões 5.8.5, 6.0.5, 6.1.2 e 6.2.0-M1 do Spring Security têm alguns falsos positivos. Agora que em muitos casos o seguinte é temporário, até o lançamento das versões 5.8.6, 6.0.6, 6.1.3 e 6.2.0-M2.

Conforme aludido pela mensagem de erro, a mitigação principal é usar um RequestMatcher completo. Isso para que o mapeamento do servlet possa ser mais claramente considerado.

Por exemplo, se uma aplicação tem um servlet implantado em /my-servlet/* e está autorizando esse tráfego da seguinte forma:

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

então, a aplicação deveria fazer o seguinte:

.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, se DispatcherServlet está implantado em um caminho diferente, como /spring-mvc/*, então em vez 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(); }

uma aplicação deve fazer:

.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 o caminho do servlet ao construir um MvcRequestMatcher é importante para garantir que a requisição seja correspondida corretamente.

== Ramos

Neste repositório, há um ramo (branch) para cada lançamento menor do Spring Security. Nesse ramo, há um commit para cada amostra afetada com a mitigação necessária.

Por exemplo, no ramo 5.8.x, há oito commits para reparar as oito amostras que exigem mitigação.

Quando as versões 5.8.6, 6.0.6, 6.1.3 e 6.2.0-M2 forem lançadas, alterações adicionais serão feitas nesses ramos para que a mitigação de melhor prática fique clara.

Baixar ferramenta