Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2023-34035-mitigations — 演示 CVE-2023-34035 在 Spring Security 中的漏洞,并提供存在漏洞和已修复的示例应用程序,教授正确的 servlet 映射和请求匹配器配置。 | Kitploit
工具/GitHubGitHub/jzheaux/cve-2023-34035-mitigations
漏洞分析代码分析Web安全错误配置学习与教育API 安全
GitHubjzheaux/cve-2023-34035-mitigations

cve-2023-34035-mitigations

演示 CVE-2023-34035 在 Spring Security 中的漏洞,并提供存在漏洞和已修复的示例应用程序,教授正确的 servlet 映射和请求匹配器配置。

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
4133年前尚未审核
分享

此仓库是一组示例,用于演示应用程序可能受到 https://spring.io/security/cve-2023-34035[CVE-2023-34035] 影响的情况。

当以下所有条件都成立时,应用程序存在漏洞:

  • Spring MVC 在 classpath 上
  • DispatcherServlet 和至少一个其他 Servlet 被映射;其中一个具有基于路径的 Servlet 映射(例如 /path/**)
  • 应用程序使用 requestMatchers(String) 来引用其 Servlet 映射形式为 /path/** 的端点

== 示例

这里有使用 Spring Boot 和不使用 Spring Boot 的示例。

包含失败测试的示例对 CVE-2023-34035 存在漏洞。测试通过的示例则不存在漏洞。

在所有情况下,每个示例都包含来自 Spring Security 的相同缓解错误,但需要注意的是,这种缓解措施在许多情况下是临时的,需等待下一个维护版本发布。

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/dispatcher-servlet-path[此示例] 代表一个存在漏洞的应用程序,其中 DispatcherServlet 被部署到 /mvc/* 而非默认的 /。

它是 存在漏洞 的,因为 Spring MVC 在 classpath 上,DispatcherServlet 和至少一个其他 Servlet 被映射——其中一个是基于非根路径的 Servlet 映射(在本例中是 DispatcherServlet),并且应用程序使用 requestMatchers(String) 来保护这些端点。

=== servlet:java-configuration:jetty

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/jetty[此示例] 代表一个安全的应用程序,其中 DispatcherServlet 被部署到 /(默认)。

它是 不存在漏洞 的。虽然 Spring MVC 在 classpath 上且使用了 DispatcherServlet,但它被部署到 /,并且没有基于非根路径的 Servlet 映射。

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/other-servlets[此示例] 代表一个存在漏洞的应用程序,其中部署了 DispatcherServlet 以及一个自定义 Servlet MyServlet。

它是 存在漏洞 的,因为 Spring MVC 在 classpath 上,DispatcherServlet 和至少一个其他 Servlet 被映射——其中一个是基于非根路径的 Servlet 映射(在本例中是 MyServlet),并且应用程序使用 requestMatchers(String) 来保护这些端点。

=== servlet:java-configuration:tomcat

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/tomcat[此示例] 代表一个安全的应用程序,其中 DispatcherServlet 被部署到 /(默认)。

它是 不存在漏洞 的。虽然 Spring MVC 在 classpath 上且使用了 DispatcherServlet,但它被部署到 /,并且没有基于非根路径的 Servlet 映射。

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/two-dispatcher-servlets[此示例] 代表一个存在漏洞的应用程序,其中部署了 DispatcherServlet 以及一个自定义 Servlet MyServlet。

它是 存在漏洞 的,因为 Spring MVC 在 classpath 上,DispatcherServlet 和至少一个其他 Servlet 被映射——其中一个是基于非根路径的 Servlet 映射(在本例中是两个 DispatcherServlet 之一),并且应用程序使用 requestMatchers(String) 来保护这些端点。

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/dispatcher-servlet-path[此示例] 代表一个存在漏洞的应用程序,其中 DispatcherServlet 被部署到 /mvc/* 而非默认的 /。

它是 存在漏洞 的,因为 Spring MVC 在 classpath 上,DispatcherServlet 和至少一个其他 Servlet 被映射——其中一个是基于非根路径的 Servlet 映射(在本例中是 DispatcherServlet),并且应用程序使用 requestMatchers(String) 来保护这些端点。

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/jetty[此示例] 代表一个安全的应用程序,其中 DispatcherServlet 被部署到 /(默认)。

它是 不存在漏洞 的。虽然 Spring MVC 在 classpath 上且使用了 DispatcherServlet,但它被部署到 /,并且没有基于非根路径的 Servlet 映射。

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/other-servlets[此示例] 代表一个存在漏洞的应用程序,其中部署了 DispatcherServlet 以及一个自定义 Servlet MyServlet。

它是 存在漏洞 的,因为 Spring MVC 在 classpath 上,DispatcherServlet 和至少一个其他 Servlet 被映射——其中一个是基于非根路径的 Servlet 映射(在本例中是 MyServlet),并且应用程序使用 requestMatchers(String) 来保护这些端点。

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/tomcat[此示例] 代表一个安全的应用程序,其中 DispatcherServlet 被部署到 /(默认)。

它是 不存在漏洞 的。虽然 Spring MVC 在 classpath 上且使用了 DispatcherServlet,但它被部署到 /,并且没有基于非根路径的 Servlet 映射。

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/undertow[此示例] 代表一个安全的应用程序,其中 DispatcherServlet 被部署到 /(默认)。

它是 不存在漏洞 的。虽然 Spring MVC 在 classpath 上且使用了 DispatcherServlet,但它被部署到 /,并且没有基于非根路径的 Servlet 映射。

== 缓解措施

如果遇到如下错误:

.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] 5.8.5、6.0.5、6.1.2 和 6.2.0-M1 版本的 Spring Security 存在一些误报。现在,在许多情况下,以下措施是临时的,需等待 5.8.6、6.0.6、6.1.3 和 6.2.0-M2 发布。

如错误消息所示,主要的缓解措施是使用完整的 RequestMatcher。这是为了能够更清晰地考虑 Servlet 映射。

例如,如果应用程序有一个部署到 /my-servlet/* 的 Servlet,并按如下方式授权该流量:

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

那么,应用程序应改为:

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

或者,如果 DispatcherServlet 部署到不同的路径,例如 /spring-mvc/*,那么将:

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

改为:

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

在构建 MvcRequestMatcher 时分离 Servlet 路径对于确保请求被正确匹配非常重要。

== 分支

在此仓库中,每个 Spring Security 的次要版本都有一个分支。在该分支上,每个受影响的示例都有一个包含所需缓解措施的提交。

例如,在 5.8.x 分支上,有八个提交来修复需要缓解措施的八个示例。

当 5.8.6、6.0.6、6.1.3 和 6.2.0-M2 发布时,将对这些分支进行额外修改,以便明确最佳实践的缓解措施。

下载工具