Spring Data MongoDB SpEL 表达式注入漏洞 (CVE-2022-22980)

工程 | Mark Paluch | 2022 年 6 月 20 日 | ...

更新

  • [06-20] CVE-2022-22980 已发布
  • [06-20] Spring Data MongoDB 3.4.13.3.5 可用

目录

概述

我们想宣布,我们已发布 Spring Data MongoDB 3.4.1 和 3.3.5 来解决以下 CVE 报告

此漏洞由来自 NSFOCUS TIANJI Lab 的张泽伟于 2022 年 6 月 13 日星期一负责任地报告。完整报告将在未来几天内发布到 MITRE 和作为安全公告发布到 tanzu.vmware.com/security

漏洞

该漏洞影响使用存储库查询方法的 Spring Data MongoDB 应用程序,这些方法使用 @Query@Aggregation 进行注释,并使用参数化的 SpEL 语句。特定的漏洞利用需要将未经消毒的输入用于存储库查询方法。

我是否受到影响?

以下是特定漏洞的必要条件

  • 使用 @Query@Aggregation 注释的存储库查询方法的声明,这些方法使用 SpEL(Spring 表达式语言)并在 SpEL 表达式中使用输入参数引用 (?0?1、…)
  • spring-data-mongodb 依赖项
  • Spring Data MongoDB 3.4.0、3.3.0 到 3.3.4 以及更旧的版本

其他说明

  • 此问题与存储库查询方法调用有关,用于使用表达式组装 MongoDB 查询。漏洞发生在查询组装期间,不需要执行查询即可进行利用。
  • 通过数组语法 ([0][1][…]) 引用 SpEL 参数不会产生漏洞,如果您无法升级到包含修复程序的版本,则建议使用此方法作为解决方法
  • 只有当应用程序使用未经消毒的用户输入调用查询方法时,才能利用此漏洞。或者,在不涉及其他应用程序代码的情况下公开存储库查询方法的安排(例如 Spring Data REST)也容易受到攻击。

状态

  • 包含修复程序的 Spring Data MongoDB 3.4.1 和 3.3.5 已发布。

建议的解决方法

首选的响应是更新到 Spring Data MongoDB 3.4.13.3.5 或更高版本。如果您已执行此操作,则无需任何解决方法。但是,有些人可能无法快速升级。因此,我们在下面提供了一些解决方法。

请注意,解决方法不一定是相互排斥的,因为安全最佳实践是“纵深防御”。

使用数组语法

如果您的应用程序需要由用户输入控制的动态 SpEL 表达式,则使用数组语法 [0] 引用 SpEL 参数是访问 SpEL 参数的安全方法。

实现自定义存储库方法

用自定义存储库方法实现替换 SpEL 表达式是在应用程序代码中组装动态查询的可行解决方法。有关更多详细信息,请参阅 存储库自定义参考文档

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部