浅谈Spring Security身份验证绕过漏洞(CVE-2023-34034)
字数 1523 2025-08-06 08:34:54

Spring Security 身份验证绕过漏洞(CVE-2023-34034)深度分析

漏洞概述

CVE-2023-34034 是 Spring Security 中的一个身份验证绕过漏洞,当 Spring Security 使用 ** 作为匹配模式时,在 Spring Security 与 Spring WebFlux 之间会发生模式不匹配,最终可能导致身份认证绕过。

受影响版本

  • Spring Security 6.1.0 - 6.1.1
  • Spring Security 6.0.0 - 6.0.4
  • Spring Security 5.8.0 - 5.8.3
  • Spring Security 5.7.0 - 5.7.8
  • Spring Security 5.6.0 - 5.6.10

漏洞原理

根本原因

漏洞的根本原因在于 Spring Security 和 Spring WebFlux 在处理 ** 通配符时的行为不一致:

  1. Spring Security/** 解释为匹配所有路径,包括当前路径和所有子路径
  2. Spring WebFlux/** 解释为仅匹配当前路径下的所有子路径,但不包括当前路径本身

具体场景

当配置如下安全规则时:

@Bean
SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
    http
        .authorizeExchange(exchanges -> exchanges
            .pathMatchers("/admin/**").authenticated()
            .anyExchange().permitAll()
        )
        .httpBasic(withDefaults());
    return http.build();
}

按照预期:

  • /admin 应该需要认证
  • /admin/ 应该需要认证
  • /admin/sub 应该需要认证

但实际上:

  • /admin 可以绕过认证(漏洞)
  • /admin/ 需要认证
  • /admin/sub 需要认证

漏洞复现

环境搭建

  1. 创建一个 Spring WebFlux 项目
  2. 添加 Spring Security 依赖
  3. 配置安全规则(如上所示)
  4. 创建一个 /admin 端点

测试步骤

  1. 直接访问 /admin - 可以绕过认证(漏洞表现)
  2. 访问 /admin/ - 需要认证(正常行为)
  3. 访问 /admin/sub - 需要认证(正常行为)

修复方案

官方修复

Spring Security 团队在以下版本中修复了此问题:

  • 6.1.2+
  • 6.0.5+
  • 5.8.4+
  • 5.7.9+
  • 5.6.11+

临时解决方案

如果无法立即升级,可以采用以下方法:

  1. 显式添加路径匹配
.pathMatchers("/admin", "/admin/**").authenticated()
  1. 使用正则表达式匹配
.pathMatchers("/admin.*", "/admin/**").authenticated()
  1. 使用 RequestMatcher
.requestMatchers(PathRequest.toStaticResources().atCommonLocations())

最佳实践

  1. 避免单独使用 /**:总是显式处理根路径和子路径
  2. 测试安全配置:对安全规则进行全面的路径测试
  3. 及时更新:保持 Spring Security 和 Spring WebFlux 版本最新
  4. 最小权限原则:从最严格的规则开始,逐步放宽

深入技术分析

路径匹配实现差异

Spring Security 使用 AntPathMatcher,而 WebFlux 使用 PathPattern

  • AntPathMatcher 行为:

    • /admin 匹配 /admin/**
    • /admin/ 匹配 /admin/**
  • PathPattern 行为:

    • /admin 不匹配 /admin/**
    • /admin/ 匹配 /admin/**

修复代码分析

修复后的代码确保了两者在处理 ** 时的行为一致性,主要修改包括:

  1. 统一路径规范化处理
  2. 确保 ** 匹配包含当前路径
  3. 改进路径匹配逻辑的一致性检查

总结

CVE-2023-34034 展示了框架间细微行为差异可能导致的安全问题。开发人员应当:

  1. 充分理解安全配置的实际效果
  2. 对关键安全路径进行充分测试
  3. 保持框架组件版本的一致性
  4. 关注安全公告并及时应用补丁

通过正确配置和及时更新,可以有效防范此类身份验证绕过风险。

Spring Security 身份验证绕过漏洞(CVE-2023-34034)深度分析 漏洞概述 CVE-2023-34034 是 Spring Security 中的一个身份验证绕过漏洞,当 Spring Security 使用 ** 作为匹配模式时,在 Spring Security 与 Spring WebFlux 之间会发生模式不匹配,最终可能导致身份认证绕过。 受影响版本 Spring Security 6.1.0 - 6.1.1 Spring Security 6.0.0 - 6.0.4 Spring Security 5.8.0 - 5.8.3 Spring Security 5.7.0 - 5.7.8 Spring Security 5.6.0 - 5.6.10 漏洞原理 根本原因 漏洞的根本原因在于 Spring Security 和 Spring WebFlux 在处理 ** 通配符时的行为不一致: Spring Security 将 /** 解释为匹配所有路径,包括当前路径和所有子路径 Spring WebFlux 将 /** 解释为仅匹配当前路径下的所有子路径,但不包括当前路径本身 具体场景 当配置如下安全规则时: 按照预期: /admin 应该需要认证 /admin/ 应该需要认证 /admin/sub 应该需要认证 但实际上: /admin 可以绕过认证(漏洞) /admin/ 需要认证 /admin/sub 需要认证 漏洞复现 环境搭建 创建一个 Spring WebFlux 项目 添加 Spring Security 依赖 配置安全规则(如上所示) 创建一个 /admin 端点 测试步骤 直接访问 /admin - 可以绕过认证(漏洞表现) 访问 /admin/ - 需要认证(正常行为) 访问 /admin/sub - 需要认证(正常行为) 修复方案 官方修复 Spring Security 团队在以下版本中修复了此问题: 6.1.2+ 6.0.5+ 5.8.4+ 5.7.9+ 5.6.11+ 临时解决方案 如果无法立即升级,可以采用以下方法: 显式添加路径匹配 : 使用正则表达式匹配 : 使用 RequestMatcher : 最佳实践 避免单独使用 /** :总是显式处理根路径和子路径 测试安全配置 :对安全规则进行全面的路径测试 及时更新 :保持 Spring Security 和 Spring WebFlux 版本最新 最小权限原则 :从最严格的规则开始,逐步放宽 深入技术分析 路径匹配实现差异 Spring Security 使用 AntPathMatcher ,而 WebFlux 使用 PathPattern : AntPathMatcher 行为: /admin 匹配 /admin/** /admin/ 匹配 /admin/** PathPattern 行为: /admin 不匹配 /admin/** /admin/ 匹配 /admin/** 修复代码分析 修复后的代码确保了两者在处理 ** 时的行为一致性,主要修改包括: 统一路径规范化处理 确保 ** 匹配包含当前路径 改进路径匹配逻辑的一致性检查 总结 CVE-2023-34034 展示了框架间细微行为差异可能导致的安全问题。开发人员应当: 充分理解安全配置的实际效果 对关键安全路径进行充分测试 保持框架组件版本的一致性 关注安全公告并及时应用补丁 通过正确配置和及时更新,可以有效防范此类身份验证绕过风险。