Spring Security 安全公告

CVE-2022-31692:Spring Security 中的转发或包含分发程序类型可能绕过授权规则

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

描述

Spring Security 版本 5.7(低于 5.7.5)和 5.6(低于 5.6.9)可能容易受到通过转发或包含分发程序类型绕过授权规则的攻击。

具体来说,当以下所有条件都满足时,应用程序存在漏洞

  • 应用程序期望 Spring Security 将安全应用于转发和包含分发程序类型。
  • 应用程序手动或通过 authorizeHttpRequests() 方法使用 AuthorizationFilter
  • 应用程序将 FilterChainProxy 配置为应用于转发和/或包含请求(例如,spring.security.filter.dispatcher-types = request, error, async, forward, include)。
  • 应用程序可能会将请求转发或包含到权限更高的安全端点。
  • 应用程序将 Spring Security 配置为通过 authorizeHttpRequests().shouldFilterAllDispatcherTypes(true) 应用于每个分发程序类型。

如果满足以下任何条件,则应用程序不会存在漏洞

  • 应用程序不使用 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 也没有配置为在转发和包含分发程序类型上调用,这取决于您自己来执行此操作。

已修复此问题的版本包括

  • Spring Security
    • 5.7.5
    • 5.6.9

鸣谢

此问题由奇安信集团深信服 SGLAB 的 Osword 发现并负责任地报告。

参考资料

历史记录

  • 2022-10-31:发布初始漏洞报告。

抢先一步

VMware 提供培训和认证,以加速您的进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部