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 社区所有即将举行的活动。

查看所有