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

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

描述

Spring Security 5.7 版本低於 5.7.55.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)。
  • 應用程式可能會將請求轉發或包含到受更高許可權保護的端點。
  • 應用程式透過 authorizeHttpRequests().shouldFilterAllDispatcherTypes(true) 配置 Spring Security 以應用於每種排程器型別

在以下任何一種情況為真時,應用程式不易受攻擊:

  • 應用程式不使用 authorizeHttpRequests()AuthorizationFilter
  • 應用程式不轉發/包含請求。
  • 應用程式不需要配置 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 傳奇安全團隊的 Osword 識別並負責任地報告。

參考資料

歷史

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

領先一步

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

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

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

檢視所有