Spring Security 安全性建議

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 派遣器類型。
  • 應用程式手動使用 AuthorizationFilter 或透過 authorizeHttpRequests() 方法使用。
  • 應用程式將 FilterChainProxy 配置為應用於 forward 和/或 include 請求(例如,spring.security.filter.dispatcher-types = request, error, async, forward, include)。
  • 應用程式可能會將請求 forward 或 include 到更高權限保護的端點。
  • 應用程式將 Spring Security 配置為透過 authorizeHttpRequests().shouldFilterAllDispatcherTypes(true) 應用於每個派遣器類型

如果符合以下任何條件,則應用程式不存在漏洞

  • 應用程式不使用 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

功勞

此問題由 Qi'anxin Group 的 Legendsec 的 SGLAB 的 Osword 識別並負責地報告。

參考資料

歷史紀錄

  • 2022-10-31:發布初步漏洞報告。

取得支援

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

瞭解更多資訊

即將舉行的活動

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

檢視全部