CVE-2022-22980:Spring Data MongoDB 透過標註式儲存庫查詢方法的 SpEL 運算式注入漏洞
高 | 2022 年 6 月 20 日 | CVE-2022-22980
說明
當 Spring Data MongoDB 應用程式使用 @Query 或 @Aggregation 標註的查詢方法,且其中的 SpEL 運算式包含查詢參數佔位符 (parameter placeholder) 以進行值繫結,但未對輸入進行清理 (sanitize) 時,則易受 SpEL 注入攻擊。
具體來說,當滿足以下所有條件時,應用程式便容易受到攻擊:
- 儲存庫查詢方法使用 @Query 或 @Aggregation 進行標註
- 標註的查詢或聚合值/pipeline 包含使用運算式中參數佔位符語法的 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 重新配置儲存庫 factory bean
修復此問題的版本包括
鳴謝
此問題由 NSFOCUS TIANJI Lab 的 Zewei Zhang 發現並負責地報告。
參考資料
歷史