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 外掛的文件以獲取詳細資訊。

在今天釋出的版本中修復之前,DataBinderdisallowedFields 的模式是區分大小寫的,這意味著除非註冊的模式包含欄位第一個字元的大寫和小寫形式,以及屬性路徑中所有巢狀欄位第一個字元的所有大小寫組合,否則欄位無法得到有效保護。

例如,如果你看過針對 RCE 漏洞的 Disallowed Fields(不允許的欄位) 規避措施,你可能會想知道為什麼不允許的欄位模式包含看似重複的條目。每個模式都必須註冊兩次,一次是第一個字元小寫,另一次是第一個字元大寫。我們今天釋出的修復透過在匹配不允許的欄位模式時忽略大小寫來解決這個問題。這帶來的額外好處是,當註冊模式為 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 或更高版本。

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

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

訂閱 Spring 簡報

保持與 Spring 簡報的聯絡

訂閱

領先一步

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

瞭解更多

獲取支援

Tanzu Spring 透過一項簡單的訂閱提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

近期活動

檢視 Spring 社群的所有近期活動。

檢視全部