漏洞概述
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 技術分析