当前位置: 首页 > news >正文

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 技术分析
http://www.xdnf.cn/news/547777.html

相关文章:

  • 实用 Git 学习工具推荐:Learn Git Branching
  • Mybatis的逆向工程Generator
  • 销售易史彦泽:从效率工具到增长引擎,AI加速CRM不断进化
  • SQL次日留存率计算精讲:自连接与多字段去重的深度应用
  • OpenCV 图像色彩空间转换
  • Yersinia:layer 2攻击框架!全参数详细教程!Kali Linux教程!
  • jieba分词
  • PCB设计教程【入门篇】——电路分析基础-基本元件(二极管三极管场效应管)
  • 可视化图解算法42:寻找峰值
  • Cribl 中 Parser 扮演着重要的角色 + 例子
  • 鸿蒙HarmonyOS多设备流转:分布式的智能协同技术介绍
  • RustDesk CentOS自建中继节点
  • Linux 特权管理与安全——从启用 Root、Sudo 提权到禁用与防护的全景解析
  • WebRTC技术EasyRTC音视频实时通话驱动智能摄像头迈向多场景应用
  • 轻量级高性能推理引擎MNN 学习笔记 04.线性回归
  • C语言| 指针变量的初始化
  • OpenHarmony开源鸿蒙兼容性测试常见问题解答分享
  • 使用 Qt Designer 开发
  • [ARM][汇编] 02.ARM 汇编常用简单指令
  • HOW - 结合 AI 进行 Tailwind 样式开发
  • Secarmy Village: Grayhat Conference靶场
  • SpringMVC所有注解按照使用位置划分
  • 基于matlabcd7.x的无网格近似方法
  • CSS 样式表的四种应用方式详解以及css注释的应用
  • TypeScript与JavaScript的异同
  • MySQL:to many connections连接数过多
  • 指令烧录ORIN NANO操作系统
  • RocketMQ实战—订单系统面临的技术挑战
  • 开放鸿蒙OpenHarmony 5.0.0 Release 兼容性测试实战经验分享
  • 工业数据治理标准规范深度解析