CVE-2022-31692:Spring Security 中的授權規則可以透過 forward 或 include 排程器型別繞過

高危 | 2022 年 10 月 31 日 | CVE-2022-31692

描述

Spring Security 5.7 版本在 5.7.5 之前以及 5.6 版本在 5.6.9 之前可能容易受到透過 forward 或 include 排程器型別繞過授權規則的攻擊。

具體來說,當滿足以下所有條件時,應用程式是脆弱的:

  • 應用程式期望 Spring Security 將安全性應用於 forward 和 include 排程器型別。
  • 應用程式手動或透過 authorizeHttpRequests() 方法使用 AuthorizationFilter
  • 應用程式配置 FilterChainProxy 以應用於 forward 和/或 include 請求(例如 spring.security.filter.dispatcher-types = request, error, async, forward, include)。
  • 應用程式可能將請求 forward 或 include 到具有更高許可權保護的端點。
  • 應用程式透過 authorizeHttpRequests().shouldFilterAllDispatcherTypes(true) 配置 Spring Security 以應用於所有排程器型別。

如果滿足以下任一條件,應用程式則不易受攻擊:

  • 應用程式不使用 authorizeHttpRequests()AuthorizationFilter
  • 應用程式不進行 forward/include 請求。
  • 應用程式不需要配置 Spring Security 以應用於 FORWARD 和 INCLUDE 排程器型別。

受影響的 Spring 產品和版本

  • Spring Security
    • 5.7.0 到 5.7.4
    • 5.6.0 到 5.6.8

緩解措施

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

  • 5.7.x 使用者應升級到 5.7.5
  • 5.6.x 使用者應升級到 5.6.9
  • 無法升級版本的使用者應使用 authorizeRequests().filterSecurityInterceptorOncePerRequest(false),而不是 authorizeHttpRequests().shouldFilterAllDispatcherTypes(true)
  • 5.7.0 以下版本且不提供 shouldFilterAllDispatcherTypes 的使用者應新增一個 ObjectPostProcessor
    authorizeHttpRequests().withObjectPostProcessor(new
    ObjectPostProcessor() {
      @Override
      public O postProcess(O filter) {
       filter.setObserveOncePerRequest(false);
       filter.setFilterAsyncDispatch(true);
       filter.setFilterErrorDispatch(true);
       return filter;
      }});

請注意,在 Spring Security 5 中,預設行為是不對同一請求多次應用過濾器,因此您必須顯式配置 Spring Security 來實現這一點。此外,FilterChainProxy 預設也不配置為在 forward 和 include 排程器型別上呼叫,這取決於您自行進行配置。

已修復此問題的版本包括:

  • Spring Security
    • 5.7.5
    • 5.6.9

致謝

此問題由奇安信集團網神安全實驗室(SGLAB of Legendsec at Qi'anxin Group)的 Osword 負責任地識別並報告。

參考資料

歷史記錄

  • 2022-10-31:首次釋出漏洞報告。

快人一步

VMware 提供培訓和認證,助您加速前進。

瞭解更多

獲取支援

Tanzu Spring 透過一項簡單的訂閱,為 OpenJDK™、Spring 和 Apache Tomcat® 提供支援和二進位制檔案。

瞭解更多

即將舉行的活動

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

檢視全部