Spring安全公告

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之外不保护任何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社区中所有即将举行的活动。

查看全部