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
已修复此问题的版本包括
鸣谢
此问题由 NSFOCUS TIANJI Lab 的张泽伟发现并负责任地报告。
参考
历史