欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > CVE-2022-22978源码分析与漏洞复现

CVE-2022-22978源码分析与漏洞复现

2025/7/24 2:53:50 来源:https://blog.csdn.net/2303_80022567/article/details/148096378  浏览:    关键词:CVE-2022-22978源码分析与漏洞复现

漏洞概述

CVE-2022-22978 是 Spring Security 框架中的一个高危认证绕过漏洞,影响版本包括 Spring Security 5.5.x < 5.5.75.6.x < 5.6.4 及更早的不受支持版本。攻击者可通过构造包含换行符(如 %0a)的 URL 路径,绕过正则表达式匹配规则,导致权限校验失效,实现未授权访问受保护资源。


技术细节分析

1. 漏洞成因
  • 正则表达式匹配模式缺陷
    Spring Security 的 RegexRequestMatcher 在处理 URL 路径匹配时,若正则表达式中包含 . 字符(例如 /admin/.*),默认情况下 . 不会匹配换行符(\n\r)。攻击者可通过在 URL 中插入 URL 编码的换行符(%0a%0d)绕过校验。
  • 安全上下文配置缺失
    漏洞版本的 RegexRequestMatcher 未启用 Pattern.DOTALL 标志,导致正则表达式未覆盖换行符等特殊字符,从而产生逻辑漏洞。
2. 源码分析
关键代码 1:RegexRequestMatcher 构造函数(漏洞版本)
public RegexRequestMatcher(String pattern, String httpMethod, boolean caseInsensitive) {// 漏洞点:未设置 Pattern.DOTALL,导致 . 不匹配换行符this.pattern = Pattern.compile(pattern, caseInsensitive ? CASE_INSENSITIVE : DEFAULT);this.httpMethod = StringUtils.hasText(httpMethod) ? HttpMethod.valueOf(httpMethod) : null;
}

问题点

  • DEFAULT 模式未包含 Pattern.DOTALL,导致 . 无法匹配换行符(如 \n)。
关键代码 2:修复版本代码对比
public final class RegexRequestMatcher implements RequestMatcher {
- private static final int DEFAULT = 0;
+ private static final int DEFAULT = Pattern.DOTALL; // 修复点:默认启用 DOTALL

修复逻辑

  • 强制启用 Pattern.DOTALL,使 . 匹配所有字符(包括换行符)。
关键代码 3:SpringSecurityConfig配置问题
 protected void configure(HttpSecurity httpSecurity) throws Exception {    
((ExpressionUrlAuthorizationConfigurer.AuthorizedUrl)httpSecurity.authorizeRequests().regexMatchers(new String[] { "/admin/.*" })).authenticated();}
  • 使用/admin/.*进行匹配
漏洞触发示例
  • 恶意 URL/admin/111%0a
    • 漏洞版本正则 /admin/.* 不会匹配 %0a(即 \n),导致路径 /admin/111\n 被误判为合法路径,绕过权限校验。

漏洞复现

环境搭建
1.使用 Vulhub 环境启动漏洞靶机:
docker-compose up -d

在这里插入图片描述

2.访问 http://target:8080,确认服务正常运行

在这里插入图片描述

攻击步骤
  1. 正常访问受限接口
    访问 /admin,触发 302 跳转至登录页。
    在这里插入图片描述

  2. 构造绕过请求
    访问 /admin/%0a,成功绕过认证并访问受保护资源。
    在这里插入图片描述


修复方案

  1. 升级版本
    升级至 Spring Security 5.5.7+5.6.4+,修复了 RegexRequestMatcher 的正则匹配逻辑。
  2. 输入过滤
    对 URL 路径进行规范化处理,过滤 %0a%0d 等特殊字符。
  3. 安全配置强化
    避免在正则表达式中过度依赖 .,改用更精确的匹配规则(如 [^/]+)。

总结

CVE-2022-22978 暴露了 Spring Security 在正则表达式匹配模式配置上的安全隐患。其根本原因在于默认未启用 Pattern.DOTALL,导致攻击者可利用换行符绕过权限校验。修复方案通过强制启用 DOTALL 标志,确保正则表达式匹配覆盖所有字符。开发者应避免在权限规则中使用宽松的正则表达式。


参考链接

  1. Spring 官方安全公告
  2. 漏洞修复 Commit 记录
  3. 漏洞复现环境(GitHub)
  4. NVD 漏洞数据库条目
  5. FreeBuf 技术分析

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词