Spring Data MongoDB SpEL 運算式注入漏洞 (CVE-2022-22980)

工程 | Mark Paluch | 2022 年 6 月 20 日 | ...

更新

  • [06-20] CVE-2022-22980 已發布
  • [06-20] Spring Data MongoDB 3.4.13.3.5 可用

目錄

概觀

我們很高興宣布我們已發布 Spring Data MongoDB 3.4.1 和 3.3.5,以解決以下 CVE 報告

此漏洞由 NSFOCUS TIANJI Lab 的 Zewei Zhang 於 2022 年 6 月 13 日星期一負責地報告。完整報告將發布到 MITRE,並在接下來的幾天內作為安全性公告發布在 tanzu.vmware.com/security 上。

漏洞

此漏洞影響使用帶有 @Query@Aggregation 註解且使用參數化 SpEL 語句的儲存庫查詢方法的 Spring Data MongoDB 應用程式。特定的攻擊需要使用未經處理的輸入到儲存庫查詢方法。

我是否受到影響?

以下是此特定漏洞的必要條件

  • 宣告帶有 @Query@Aggregation 註解的儲存庫查詢方法,這些方法使用 SpEL (Spring Expression Language) 並在 SpEL 運算式中使用輸入參數引用 (?0, ?1, …)
  • spring-data-mongodb 依賴項
  • Spring Data MongoDB 3.4.0、3.3.0 到 3.3.4 和更早版本

其他說明

  • 此問題與使用運算式組裝 MongoDB 查詢的儲存庫查詢方法調用有關。此漏洞發生在查詢組裝期間,不需要執行查詢即可進行攻擊。
  • 通過陣列語法 ([0], [1], […]) 引用 SpEL 參數不會產生漏洞,如果您無法升級到包含修復的版本,建議使用此方法作為變通辦法
  • 只有在應用程式使用未經處理的用戶輸入調用查詢方法時,才能利用此漏洞。或者,在不涉及其他應用程式代碼的情況下公開儲存庫查詢方法的安排(例如 Spring Data REST)也容易受到攻擊。

狀態

  • Spring Data MongoDB 3.4.1 和 3.3.5 已經發布,其中包含修復程序。

建議的解決方法

首選的回應是更新到 Spring Data MongoDB 3.4.13.3.5 或更高版本。如果您已執行此操作,則無需任何解決方法。但是,有些人可能處於無法快速升級的位置。因此,我們在下面提供了一些解決方法。

請注意,解決方法不一定是互斥的,因為安全最好是「深入」完成的。

使用陣列語法

如果您的應用程式需要由用戶輸入控制的動態 SpEL 運算式,那麼使用陣列語法 [0] 引用 SpEL 參數是一種安全的訪問 SpEL 參數的方法。

實作自定義儲存庫方法

將 SpEL 運算式替換為自定義儲存庫方法實作是一種可行的解決方法,可在應用程式代碼中組裝您的動態查詢。 有關更多詳細信息,請參閱關於儲存庫自定義的參考文檔

取得 Spring 電子報

通過 Spring 電子報保持聯繫

訂閱

領先一步

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

了解更多

取得支持

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二進制文件。

了解更多

即將舉行的活動

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

查看全部