Spring Framework 資料繫結規則漏洞 (CVE-2022-22968)

工程 | Sam Brannen | 2022 年 4 月 13 日 | ...

目錄

概述

在調查 Spring Framework RCE 漏洞 CVE-2022-22965 和建議的解決方法時,我們意識到 WebDataBinder 上的 disallowedFields 配置設定不直觀且沒有清晰的文件。我們已經修復了這個問題,但為了安全起見,我們還是決定釋出一個後續的 CVE,以確保應用程式開發人員收到警報並有機會審查他們的配置。

我們已經發布了 Spring Framework 5.3.19 和 5.2.21,其中包含了修復程式。Spring Boot 2.6.7 和 2.5.13 定於 2022 年 4 月 21 日釋出。

在 Spring Boot 2.6.7 和 2.5.13 釋出之前,您應該在 Spring Boot 應用程式中手動升級 Spring Framework 依賴項。要覆蓋 Maven 或 Gradle 構建中的 Spring Framework 版本,您應該使用 spring-framework.version 屬性。

有關詳細資訊,請參閱 Spring Boot Maven 外掛Gradle 外掛的文件。

在今天釋出的修復程式之前,DataBinder 中的 disallowedFields 模式是區分大小寫的,這意味著除非為欄位的第一個字元(包括屬性路徑中所有巢狀欄位的第一個字元的所有大小寫組合)註冊了大小寫不同的模式,否則欄位無法得到有效保護。

例如,如果您看過針對 RCE 漏洞的 “禁止欄位” 解決方法,您可能想知道為什麼禁止欄位模式包含看似重複的條目。每個模式都必須註冊兩次,一次是第一個字元小寫,另一次是第一個字元大寫。我們今天釋出的修復程式透過在匹配禁止欄位模式時忽略大小寫來解決此問題。這樣做還有一個額外的好處,即當註冊模式為 firstname 時,不允許繫結到 firstName 屬性。換句話說,我們所做的更改不僅修復了 CVE 中報告的漏洞,而且還使禁止欄位模式總體上更加健壯。

這會影響我的應用程式嗎?

這些是特定漏洞的必要條件

  • DataBinder 中註冊禁止欄位模式
  • spring-webmvcspring-webflux 依賴項
  • Spring Framework 版本 5.3.0 到 5.3.18、5.2.0 到 5.2.20,以及更早的版本

附加說明

  • 此問題與用於從請求引數(查詢引數或表單資料)填充物件的資料繫結有關。資料繫結用於使用 @ModelAttribute 註解或可選地沒有該註解且沒有任何其他 Spring Web 註解的控制器方法引數。
  • 此問題與 @RequestBody 控制器方法引數(例如 JSON 反序列化)無關。但是,如果這些方法有另一個透過查詢引數的資料繫結填充的方法引數,它們仍然可能存在漏洞。
  • 即使您不註冊禁止欄位模式,您的 Spring MVC 或 Spring WebFlux 應用程式也可能容易受到資料繫結問題的影響。我們強烈建議您審查您的 DataBinder 配置以及更廣泛的資料繫結方法。有關更多詳細資訊,請參閱 Spring Framework 參考手冊中新的 資料繫結模型設計 部分。

重新評估您的資料繫結方法

如果您正在使用禁止欄位模式並計劃繼續使用它們,您應該儘快更新到 Spring Framework 5.3.195.2.21 或更高版本。

但是,除了依賴禁止欄位模式之外,還有其他替代方案。正如參考手冊中新的 模型設計 部分所討論的,我們推薦的方法是使用專用模型物件,該物件僅公開與支援用例相關的屬性。另一種替代方法是切換到允許欄位模式:您可以透過 WebDataBinder 中的 setAllowedFields() 提供明確的“允許列表”,而不是透過 setDisallowedFields() 提供“拒絕列表”。

請記住,強烈建議您不要在資料繫結場景中使用來自您的域模型(例如 JPA 或 Hibernate 實體)的型別作為模型物件。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有