Spring 安全公告

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

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

描述

当使用 @Query 或 @Aggregation 注解的查询方法,并且 SpEL 表达式包含用于值绑定的查询参数占位符时,如果输入未经消毒,Spring Data MongoDB 应用程序容易受到 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+

致谢

此问题由 NSFOCUS 天机实验室的张泽伟发现并负责任地报告。

参考

历史

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

抢先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部