CVE-2023-34035: 使用多个 servlet 时授权规则可能配置错误

| 2023年7月17日 | CVE-2023-34035

描述

除非另有说明,否则严重性为高。

Spring Security 5.85.8.5之前版本)、6.06.0.5之前版本)和6.16.1.2之前版本)可能容易受到授权规则配置错误的影响,如果应用程序使用requestMatchers(String)requestMatchers(HttpMethod, String)并且存在多个servlet(其中一个为Spring MVC的DispatcherServlet)。

DispatcherServlet是Spring MVC的一个组件,它将HTTP端点映射到带有@Controller注解的类中的方法。)

具体来说,当以下所有情况都为真时,应用程序是易受攻击的

  • 类路径中包含Spring MVC
  • Spring Security在单个应用程序中保护多个servlet(其中一个为Spring MVC的DispatcherServlet
  • 应用程序使用requestMatchers(String)requestMatchers(HttpMethod, String)

在以下任何一种情况为真时,应用程序不易受攻击:

  • 应用程序的类路径中没有Spring MVC
  • 应用程序除了Spring MVC的DispatcherServlet之外不保护其他servlet
  • 应用程序不使用requestMatchers(String)requestMatchers(HttpMethod, String)

受影响的 Spring 产品和版本

  • Spring Security 5.8.05.8.4
  • Spring Security 6.0.06.0.4
  • Spring Security 6.1.06.1.1

缓解措施

受影响版本的用户应采用以下缓解措施。

首先

  • 5.8.x 用户应升级到 5.8.5
  • 6.0.x 用户应升级到 6.0.5
  • 6.1.x 用户应升级到 6.1.2

其次,如果您使用多个servlet,并且其中一个为Spring MVC的DispatcherServlet,您可能会在启动时看到以下错误消息

This method cannot decide whether these patterns are Spring MVC patterns or not.
If this endpoint is a Spring MVC endpoint, please use `requestMatchers(MvcRequestMatcher)`;
otherwise, please use `requestMatchers(AntPathRequestMatcher)`.

有时这些额外的servlet是不必要的。例如,一些servlet容器会添加一个DefaultServlet,而DispatcherServlet实际上取代了它。在许多情况下,这样的servlet可以从您的容器的全局配置中删除。

如果不需要额外的servlet,请尝试将其删除,看看错误是否仍然存在。如果仍然存在,请按照错误消息中的说明操作。

有关如何处理此错误消息的几个示例,请参见以下缓解措施仓库

致谢

此问题由Kudelski Security的高级软件工程师Mouad Kondah发现并负责任地报告。

领先一步

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

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

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

查看所有