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
已修復此問題的釋出版本包括
致謝
本問題由安天智甲實驗室的張澤偉發現並負責報告。
參考資料
歷史