CVE-2023-34035:當使用多個 Servlet 時,授權規則可能配置錯誤

高危 | 2023 年 7 月 17 日 | CVE-2023-34035

描述

除非另有說明,否則嚴重程度很高。

Spring Security 版本 5.8(低於 5.8.5)、6.0(低於 6.0.5)和 6.1(低於 6.1.2)可能容易受到授權規則錯誤配置的影響,如果應用程式使用 requestMatchers(String)requestMatchers(HttpMethod, String) 和多個 servlet,其中一個是 Spring MVC 的 DispatcherServlet。

DispatcherServlet 是一個 Spring MVC 元件,它將 HTTP 端點對映到 @Controller 註解類上的方法。)

具體來說,當以下所有條件都為真時,應用程式容易受到攻擊

  • Spring MVC 在類路徑上
  • Spring Security 正在保護單個應用程式中的多個 servlet(其中一個是 Spring MVC 的 DispatcherServlet
  • 該應用程式使用 requestMatchers(String)requestMatchers(HttpMethod, String)

如果以下任何一項為真,則應用程式不易受到攻擊

  • 該應用程式的類路徑上沒有 Spring MVC
  • 該應用程式僅保護 Spring MVC 的 DispatcherServlet
  • 該應用程式不使用 requestMatchers(String)requestMatchers(HttpMethod, String)

受影響的 Spring 產品和版本

  • Spring Security 5.8.05.8.4
  • Spring Security 6.0.06.0.4
  • Spring Security 6.1.06.1.1

緩解措施

受影響版本的使用者應採取以下緩解措施。

首先

  • 5.8.x 使用者應升級到 5.8.5
  • 6.0.x 使用者應升級到 6.0.5
  • 6.1.x 使用者應升級到 6.1.2

其次,如果您使用多個 servlet 並且其中一個是 Spring MVC 的 DispatcherServlet,您可能會在啟動時看到以下錯誤訊息

This method cannot decide whether these patterns are Spring MVC patterns or not.
If this endpoint is a Spring MVC endpoint, please use `requestMatchers(MvcRequestMatcher)`;
otherwise, please use `requestMatchers(AntPathRequestMatcher)`.

有時不需要這些額外的 servlet。 例如,某些 servlet 容器將新增一個 DefaultServlet,該 servlet 有效地被 DispatcherServlet 替換。 在許多情況下,可以從容器的全域性配置中刪除此類 servlet。

如果不需要額外的 servlet,請嘗試刪除它們,看看錯誤是否仍然存在。 如果是這樣,請按照錯誤訊息中的說明進行操作。

有關如何解決該錯誤訊息的幾個示例,請參閱 以下緩解儲存庫

鳴謝

此問題由 Kudelski Security 的高階軟體工程師 Mouad Kondah 發現並負責任地報告。

搶先一步

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

瞭解更多

獲得支援

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

瞭解更多

即將舉行的活動

檢視 Spring 社群中所有即將舉行的活動。

檢視全部