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

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

描述

除非另有说明,否则严重程度很高。

Spring Security 版本 5.8(低于 5.8.5)、6.0(低于 6.0.5)和 6.1(低于 6.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
  • 该应用程序不使用 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,该 servlet 有效地被 DispatcherServlet 替换。 在许多情况下,可以从容器的全局配置中删除此类 servlet。

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

有关如何解决该错误消息的几个示例,请参阅 以下缓解存储库

鸣谢

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

抢先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部