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