• Spring Security 的身份验证绕过漏洞CVE-2023-34035



    在这里插入图片描述

    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.参考文档

    1. CVE 官方网站 https://www.cve.org/CVERecord
      在这里插入图片描述

    2. https://spring.io/security/cve-2023-34035

    3. 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 端点。
    1. 受影响的版本:
    • 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
    
    • 1
    • 2
    • 3

    上述版本要求使用以下Spring Framework版本:

    5.8.x应升级到5.8.5
    6.0.x应升级到6.0.5
    6.1.x应升级到6.1.2
    
    • 1
    • 2
    • 3

    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).
    
    • 1
    • 2
    • 3
    • 4

    请按照此错误消息进行操作。

    例如,如果使用requestMatchers(String)指向一个非 Spring MVC 端点 /endpoint,那么将其更改为 requestMatchers(new AntPathRequestMatcher("/endpoint"))

    如果使用 requestMatchers(String) 指向一个 Spring MVC 端点 /mvc-endpoint,那么将其更改为 requestMatchers(new MvcRequestMatcher(introspector, "/mvc-endpoint")),其中 introspector 是一个 @Autowired 的 HandlerMappingIntrospector

  • 相关阅读:
    后台管理----新建和编辑hooks 封装
    招投标系统软件源码,招投标全流程在线化管理
    Linux驱动开发(四)---树莓派内核编译
    无重复字符的最长子串-返回结果字符串
    算法:最长递增子序列
    【开发笔记】基于机智云4G转接板GC211的设备上云APP控制
    【vue】vue3中状态管理Pinia(Vuex5)使用快速上手
    java毕业设计病人追踪治疗信息系统mybatis+源码+调试部署+系统+数据库+lw
    拖拽式在线表单设计器好用吗?
    Monaco Editor 的基本用法
  • 原文地址:https://blog.csdn.net/wangshuai6707/article/details/132898994