領先一步
VMware 提供訓練和認證,以加速您的進展。
瞭解更多在調查 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 漏洞的 Disallowed Fields 解決方案,您可能想知道為什麼 disallowed field 模式包含看似重複的項目。每個模式都必須註冊兩次,一次使用第一個字元的小寫形式,另一次使用第一個字元的大寫形式。我們今天發布的修復程式透過在比對 disallowed field 模式時忽略大小寫來解決此問題。這額外的好處是,當註冊的模式為 firstname
時,不允許繫結至 firstName
屬性。換句話說,我們所做的變更不僅修復了 CVE 中報告的漏洞,也讓 disallowed field 模式在一般情況下更為穩健。
以下是此特定漏洞的必要條件
DataBinder
中註冊 disallowed field 模式spring-webmvc
或 spring-webflux
相依性其他注意事項
@ModelAttribute
註解或選擇性地不使用註解,且不使用任何其他 Spring Web 註解的控制器方法參數。@RequestBody
控制器方法參數 (例如 JSON 還原序列化) 無關。但是,如果這些方法有另一個透過查詢參數的資料繫結填入的方法參數,則可能仍然容易受到攻擊。DataBinder
設定,以及更廣泛地檢閱您的資料繫結方法。如需更多詳細資訊,請參閱 Spring Framework 參考手冊中新的 Data Binding Model Design 章節。如果您正在使用 disallowed field 模式並計劃繼續使用,您應務必盡快更新至 Spring Framework 5.3.19 和 5.2.21 或更高版本。
但是,除了依賴 disallowed field 模式之外,還有其他替代方案。如參考手冊中新的 Model Design 章節所述,我們建議的方法是使用專用的模型物件,該物件僅公開與支援的使用案例相關的屬性。另一個替代方案是切換到 allowed field 模式:您可以透過 WebDataBinder
中的 setAllowedFields()
提供明確的「允許清單」,而不是透過 setDisallowedFields()
提供「拒絕清單」。
請記住,強烈建議您不要在資料繫結情境中使用網域模型中的類型,例如 JPA 或 Hibernate 實體作為模型物件。