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
已修复此问题的发布版本包括
致谢
本问题由安天智甲实验室的张泽伟发现并负责报告。
参考资料
历史