【Spring Security RegexRequestMatcher 认证绕过漏洞(CVE-2022-22978)分析】

一、漏洞概述

CVE-2022-22978 是 Spring Security 中的一个身份认证绕过漏洞,攻击者可在未登录状态下,通过构造特殊 URL 请求,绕过配置的权限控制规则,访问本应受保护的管理接口或敏感资源。

该漏洞的核心出现在 org.springframework.security.web.util.matcher.RegexRequestMatcher 类中,当开发者使用正则表达式进行 URL 权限匹配时,若正则中包含通配符 .,且请求路径中嵌入换行符(如 \r\n),则可能导致 Spring Security 无法正确识别请求路径,从而错误地放行未授权访问。


二、技术原理剖析

要理解该漏洞的成因,需从 Java 正则表达式机制和 Spring 框架的请求处理流程说起。

1. 正则表达式中 . 的默认行为

在 Java 中,正则表达式中的元字符 . 表示"匹配除换行符之外的任意单个字符"。这意味着:

  • . 可以匹配字母、数字、符号、空格等;
  • 但默认情况下,不匹配 \n(换行符)、 \r(回车符)等控制字符

只有在启用 Pattern.DOTALL 模式时,. 才会真正"匹配一切",包括换行符。

2. Spring Security 的匹配逻辑缺陷

当开发者使用如下配置时:

复制代码
http
    .authorizeRequests()
    .regexMatchers("/admin/.*").authenticated()
    .anyRequest().permitAll();

Spring Security 会使用 RegexRequestMatcher 对请求路径进行正则匹配。但在漏洞版本中(5.5.7 之前、5.6.4 之前),其内部创建正则模式时未添加 Pattern.DOTALL 标志

复制代码
Pattern.compile(patternStr); // 缺少 DOTALL

这就导致:

  • 正常路径如 /admin/user 能被正确匹配,触发认证;
  • 但恶意构造的路径如 /admin/%0A(即 /admin/\n)由于包含换行符,无法被正则 /admin/.* 匹配成功
3. 漏洞复现

构造如下请求:

复制代码
GET /admin/%0A HTTP/1.1
Host: example.com
  • Spring Security 层 :使用 RegexRequestMatcher 匹配路径,因 %0A 解码为 \n,而 . 不匹配 \n匹配失败 → 认为该路径不在保护范围内 → 不执行认证拦截
  • Spring MVC 层 :使用 @RequestMapping("/admin/**") 等通配路径映射控制器,其底层使用 AntPathMatcherPathPatternParser,会自动处理和标准化路径,仍能正确路由到目标 Controller

结果:未登录用户成功访问需认证的接口,绕过权限控制。

使用vulhub搭建靶场:服务器启动后,访问以下链接即可成功绕过认证。

📌 关键点:Security 层"没认出来",MVC 层"认出来了"------两者对同一路径的解析不一致,导致安全策略失效。


三、漏洞触发条件

并非所有使用 RegexRequestMatcher 的项目都会受影响,需同时满足以下条件:

  1. 使用了 regexMatchers(...) 方法 进行权限配置;
  2. 正则表达式中包含 . 通配符(如 .*);
  3. Spring Security 版本低于 5.5.7 或 5.6.4;
  4. 控制器使用通配路径(如 /admin/**),否则无法命中;
  5. 未对请求路径进行标准化或过滤。

四、影响范围

Spring Security 版本 是否受影响
5.5.0 ~ 5.5.6 ✅ 是
5.6.0 ~ 5.6.3 ✅ 是
≥ 5.5.7 / ≥ 5.6.4 ❌ 否
≥ 5.7.0 ❌ 安全

注:更早的不受支持版本(如 5.4.x)若存在相同实现,也可能受影响。


五、官方修复方案

Spring 官方在 5.5.7 和 5.6.4 版本中修复了该问题,核心修改为:

复制代码
// 修复前
Pattern pattern = Pattern.compile(patternStr);

// 修复后
Pattern pattern = Pattern.compile(patternStr, Pattern.DOTALL);

通过启用 DOTALL 模式,确保 . 能匹配所有字符,包括换行符,从而保证路径匹配的完整性与安全性。


六、应对策略与建议

1. 立即升级版本
  • 升级 Spring Security 至 5.5.7 或更高版本
  • 若使用 Spring Boot,建议同步升级至兼容的安全版本(如 2.5.14 或 2.6.8 以上)。
2. **优先使用 antMatchers 替代 **regexMatchers

Ant 风格路径匹配(如 /admin/**)更安全、直观,且无此类正则陷阱。

复制代码
http
    .authorizeRequests()
    .antMatchers("/admin/**").authenticated()
    ...
3. 统一路径处理逻辑

在网关或过滤器中对请求路径进行标准化处理,过滤或拒绝包含控制字符(如 %0A%0D)的 URL。

4. 加强安全测试

引入自动化 Fuzz 测试,模拟异常输入路径,验证权限控制是否健壮。

5. 遵循最小权限原则

即使存在漏洞,也应通过角色权限细分、接口级鉴权等方式降低潜在风险。


参考资源

  • Spring Security 官方发布日志
  • CVE-2022-22978 漏洞公告
  • VulHub 漏洞复现环境
相关推荐
小码哥_常17 小时前
别再被误导!try...catch性能大揭秘
后端
无巧不成书021818 小时前
30分钟入门Java:从历史到Hello World的小白指南
java·开发语言
苍何19 小时前
30分钟用 Agent 搓出一家跨境网店,疯了
后端
ssshooter19 小时前
Tauri 2 iOS 开发避坑指南:文件保存、Dialog 和 Documents 目录的那些坑
前端·后端·ios
追逐时光者19 小时前
一个基于 .NET Core + Vue3 构建的开源全栈平台 Admin 系统
后端·.net
程序员飞哥19 小时前
90后大龄程序员失业4个月终于上岸了
后端·面试·程序员
zs宝来了20 小时前
Playwright 自动发布 CSDN 的完整实践
java
吴声子夜歌21 小时前
TypeScript——基础类型(三)
java·linux·typescript
Chengbei1121 小时前
推送POC汇总 — 2026年1月多产品多类型vulnerability速递与应急建议
安全·web安全·网络安全·系统安全·网络攻击模型·安全架构
GetcharZp21 小时前
Git 命令行太痛苦?这款 75k Star 的神级工具,让你告别“合并冲突”恐惧症!
后端