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 的 Zewei Zhang 于 2022 年 6 月 13 日星期一负责任地报告。完整报告将在未来几天内发布给 MITRE,并以安全公告的形式发布在 tanzu.vmware.com/security 下。

漏洞

该漏洞影响使用 ` @Query` 或 `@Aggregation` 注解并使用参数化 SpEL 语句的存储库查询方法的 Spring Data MongoDB 应用程序。特定的漏洞利用需要使用未经清理的用户输入来调用存储库查询方法。

我是否受到影响?

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

  • 声明使用 SpEL(Spring 表达式语言)并在使用 SpEL 表达式中引用输入参数(`?0`、`?1` 等)的 `@Query` 或 `@Aggregation` 注解的存储库查询方法
  • `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.1** 和 **3.3.5** 或更高版本。如果您已完成此操作,则无需其他解决方法。但是,有些用户可能无法立即进行升级。因此,我们提供了以下一些解决方法。

请注意,解决方法并非完全互斥,因为安全措施最好采用“纵深防御”。

使用数组语法

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

实现自定义存储库方法

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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

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

查看所有