Spring Security 安全建議

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

修復此問題的版本包括

  • Spring Data MongoDB
    • 3.4.1+
    • 3.3.5+

鳴謝

此問題由 NSFOCUS TIANJI Lab 的 Zewei Zhang 發現並負責地報告。

參考資料

歷史

  • 2022-06-20:發布初始漏洞報告。

取得領先優勢

VMware 提供培訓和認證,以加速您的進度。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

查看所有