文章目录
- 0.前言
- 漏洞
- 漏洞介绍
- 描述
- 1.参考文档
- 2.基础介绍
- 2.1 组件简介:
- 2.2 漏洞简介:
- 3.解决方案
- 3.1. 升级版本
0.前言
背景:公司收到关于 Spring Security 的一个身份验证绕过漏洞的通知,该漏洞被标识为 CVE-2023-34035
漏洞
高 | 2023年7月17日 | CVE-2023-34035
关于 Spring Security 的一个身份验证绕过漏洞的通知,该漏洞被标识为 CVE-2023-34035,
漏洞介绍
CVE-2023-34034:WebFlux使用未加前缀的双通配符模式绕过安全性
描述
受影响的Spring产品和版本
Spring Security 5.8.0至5.8.4
Spring Security 6.0.0至6.0.4
Spring Security 6.1.0至6.1.1
受影响版本的用户应采取以下缓解措施。
首先:
5.8.x应升级到5.8.5
6.0.x应升级到6.0.5
6.1.x应升级到6.1.2
1.参考文档
-
CVE 官方网站 https://www.cve.org/CVERecord
-
https://spring.io/security/cve-2023-34035
-
https://nvd.nist.gov/vuln/detail/CVE-2023-34035
2.基础介绍
2.1 组件简介:
Spring Security 是一个安全框架,提供身份验证、授权和其他安全功能,用于保护 Web 应用免受攻击。其主要目标是确保只有经过身份验证和授权的用户可以访问应用程序的特定部分或执行特定操作。
2.2 漏洞简介:
收到关于 Spring Security 的一个身份验证绕过漏洞的通知,该漏洞被标识为 CVE-2023-34035,
受影响的 Spring Security 版本存在授权规则配置错误的漏洞,如果应用程序使用 requestMatchers(String) 和多个 Servlet,其中一个是 Spring MVC 的 DispatcherServlet。
(DispatcherServlet 是一个 Spring MVC 组件,将 HTTP 端点映射到带有 @Controller 注解的类的方法。)
具体而言,当满足以下条件时,应用程序就存在漏洞:
- 类路径上存在 Spring MVC。
- Spring Security 在单个应用程序中保护多个 Servlet(其中一个是 Spring MVC 的 DispatcherServlet)。
- 应用程序使用 requestMatchers(String) 引用非 Spring MVC 端点。
如果满足以下任何条件,应用程序就不会存在漏洞:
- 应用程序没有在类路径上引入 Spring MVC。
- 应用程序只保护了 Spring MVC 的 DispatcherServlet,没有其他 Servlet。
- 应用程序仅将 requestMatchers(String) 用于 Spring MVC 端点。
- 受影响的版本:
- 5.8.0 ≤ Spring Security ≤ 5.8.4
- 6.0.0 ≤ Spring Security ≤ 6.0.4
- 6.1.0 ≤ Spring Security ≤ 6.1.1
3.解决方案
3.1. 升级版本
以下Spring Security版本修复了此漏洞:
Spring Security 5.8.0至5.8.4
Spring Security 6.0.0至6.0.4
Spring Security 6.1.0至6.1.1
上述版本要求使用以下Spring Framework版本:
5.8.x应升级到5.8.5
6.0.x应升级到6.0.5
6.1.x应升级到6.1.2
Spring 建议采取以下两步缓解措施:
步骤 1:升级到最新版本的 Spring Security(6.1.2 / 6.0.5 / 5.8.5)。链接:https://spring.io/projects/spring-security
步骤 2:如果您正在使用多个 Servlet,其中一个是 Spring MVC 的 DispatcherServlet,在启动时可能会看到以下错误消息:
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).
请按照此错误消息进行操作。
例如,如果使用requestMatchers(String)
指向一个非 Spring MVC 端点 /endpoint,那么将其更改为 requestMatchers(new AntPathRequestMatcher("/endpoint"))
。
如果使用 requestMatchers(String) 指向一个 Spring MVC 端点 /mvc-endpoint,那么将其更改为 requestMatchers(new MvcRequestMatcher(introspector, "/mvc-endpoint"))
,其中 introspector 是一个 @Autowired 的 HandlerMappingIntrospector
。