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 报告

此漏洞由绿盟科技天机实验室的 Zewei Zhang 于 2022 年 6 月 13 日(星期一)负责任地报告。完整报告将在未来几天发布到 MITRE 并作为安全公告发布在 tanzu.vmware.com/security 下。

漏洞

该漏洞影响使用带有 @Query@Aggregation 注解并使用参数化 SpEL 语句的 Repository 查询方法的 Spring Data MongoDB 应用程序。特定的利用需要向 Repository 查询方法使用未经净化的输入。

我是否受到影响?

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

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

附加说明

  • 此问题与通过表达式组装 MongoDB 查询的 Repository 查询方法调用有关。此漏洞发生在查询组装期间,不需要执行查询即可进行利用。
  • 通过数组语法 ([0], [1], […]) 引用 SpEL 参数不会产生漏洞,如果您无法升级到包含修复的版本,这是一种推荐的权宜之计。
  • 只有当应用程序使用未经净化的用户输入调用查询方法时,才能利用此漏洞。此外,在不涉及额外应用程序代码(例如 Spring Data REST)的情况下暴露 Repository 查询方法的配置也存在漏洞。

状态

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

建议的权宜之计

首选的应对措施是更新到 Spring Data MongoDB 3.4.13.3.5 或更高版本。如果您已经完成此操作,则无需任何权宜之计。然而,有些人可能无法快速升级。出于这个原因,我们在下面提供了一些权宜之计。

请注意,权宜之计不一定是相互排斥的,因为安全最好采取“深度防御”。

使用数组语法

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

实现自定义 Repository 方法

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

订阅 Spring 通讯

通过 Spring 通讯保持联系

订阅

领先一步

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

了解更多

获取支持

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

了解更多

近期活动

查看 Spring 社区的所有近期活动。

查看全部