CVE-2022-22978源码分析与漏洞复现
漏洞概述
CVE-2022-22978 是 Spring Security 框架中的一个高危认证绕过漏洞,影响版本包括 Spring Security 5.5.x < 5.5.7、5.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,确认服务正常运行
攻击步骤
-
正常访问受限接口:
访问/admin
,触发 302 跳转至登录页。
-
构造绕过请求:
访问/admin/%0a
,成功绕过认证并访问受保护资源。
修复方案
- 升级版本:
升级至 Spring Security 5.5.7+ 或 5.6.4+,修复了RegexRequestMatcher
的正则匹配逻辑。 - 输入过滤:
对 URL 路径进行规范化处理,过滤%0a
、%0d
等特殊字符。 - 安全配置强化:
避免在正则表达式中过度依赖.
,改用更精确的匹配规则(如[^/]+
)。
总结
CVE-2022-22978 暴露了 Spring Security 在正则表达式匹配模式配置上的安全隐患。其根本原因在于默认未启用 Pattern.DOTALL
,导致攻击者可利用换行符绕过权限校验。修复方案通过强制启用 DOTALL
标志,确保正则表达式匹配覆盖所有字符。开发者应避免在权限规则中使用宽松的正则表达式。
参考链接
- Spring 官方安全公告
- 漏洞修复 Commit 记录
- 漏洞复现环境(GitHub)
- NVD 漏洞数据库条目
- FreeBuf 技术分析