Spring框架数据绑定规则漏洞 (CVE-2022-22968)

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

目录

概述

在调查Spring框架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 BootMaven插件Gradle插件的文档。

在今天的发行版中进行修复之前,DataBinderdisallowedFields的模式是区分大小写的,这意味着除非为字段的第一个字符注册了大写和小写两种模式,包括属性路径中所有嵌套字段的第一个字符的所有大小写组合,否则字段不会得到有效保护。

例如,如果您看过禁止的字段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或更高版本。

但是,还有其他方法可以替代依赖于禁止的字段模式。正如参考手册中的新模型设计部分所讨论的那样,我们推荐的方法是使用专用模型对象,该对象仅公开与支持的用例相关的属性。另一种方法是切换到允许的字段模式:与其通过setDisallowedFields()提供“拒绝列表”,不如通过WebDataBinder中的setAllowedFields()提供显式的“允许列表”。

请记住,强烈建议您**不要**在数据绑定场景中使用来自域模型的类型,例如JPA或Hibernate实体作为模型对象。

获取Spring新闻通讯

通过Spring新闻通讯保持联系

订阅

领先一步

VMware提供培训和认证,以加速您的进步。

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看Spring社区中所有即将举行的活动。

查看全部