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 的張澤偉發現並負責任地報告。
參考
歷史