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

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

描述

当 Spring Data MongoDB 应用程序使用带有 SpEL 表达式的 @Query 或 @Aggregation 注释的查询方法时,如果输入未经过清理,则存在 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“)
  • 在调用查询方法之前清理参数
  • 通过带有受限 QueryMethodEvaluationContextProvider 的 BeanPostProcessor 重新配置存储库工厂 bean

已修复此问题的版本包括

  • Spring Data MongoDB
    • 3.4.1+
    • 3.3.5+

鸣谢

此问题由 NSFOCUS TIANJI Lab 的张泽伟发现并负责任地报告。

参考

历史

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

更进一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部