CVE-2022-22980: Spring Data MongoDB 通过注解存储库查询方法存在的 SpEL 表达式注入漏洞

| 2022年6月20日 | CVE-2022-22980

描述

当Spring Data MongoDB应用程序使用带有@Query或@Aggregation注解的查询方法,并且其SpEL表达式包含用于值绑定的查询参数占位符,且输入未经净化时,该应用程序易受SpEL注入攻击。

具体来说,当以下所有情况都为真时,应用程序是易受攻击的

  • 仓库查询方法使用@Query或@Aggregation注解
  • 带注解的查询或聚合值/管道包含使用表达式中参数占位符语法的SpEL部分
  • 用户提供的输入未经应用程序净化

在以下任何一种情况为真时,应用程序不易受攻击:

  • 带注解的仓库查询或聚合方法不包含表达式
  • 带注解的仓库查询或聚合方法未在表达式中使用参数占位符语法
  • 用户提供的输入经过应用程序净化
  • 仓库配置为使用限制SpEL用法的QueryMethodEvaluationContextProvider

受影响的 Spring 产品和版本

  • Spring Data MongoDB
    • 3.4.0
    • 3.3.0至3.3.4
    • 较旧的、不受支持的版本也受到影响

缓解措施

受影响版本的用户应采取以下缓解措施:3.4.x用户应升级到3.4.1+。3.3.x用户应升级到3.3.5+。无需其他步骤。对于无法升级到上述版本的应用程序,还有其他缓解步骤。

其他缓解步骤

  • 重写查询或聚合声明,以在表达式中使用参数引用(“[0]”而非“?0”)
  • 在调用查询方法前净化参数
  • 通过BeanPostProcessor使用受限的QueryMethodEvaluationContextProvider重新配置仓库工厂bean

已修复此问题的发布版本包括

  • Spring Data MongoDB
    • 3.4.1+
    • 3.3.5+

致谢

本问题由安天智甲实验室的张泽伟发现并负责报告。

参考资料

历史

  • 2022-06-20:发布初始漏洞报告。

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看所有