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 社区所有即将举行的活动。

查看所有