快人一步
VMware 提供培训和认证,助您加速前进。
了解更多Spring Security 5.7 版本在 5.7.5 之前以及 5.6 版本在 5.6.9 之前可能容易受到通过 forward 或 include 调度器类型绕过授权规则的攻击。
具体来说,当满足以下所有条件时,应用程序是脆弱的:
authorizeHttpRequests()
方法使用 AuthorizationFilter
。FilterChainProxy
以应用于 forward 和/或 include 请求(例如 spring.security.filter.dispatcher-types = request, error, async, forward, include
)。authorizeHttpRequests().shouldFilterAllDispatcherTypes(true)
配置 Spring Security 以应用于所有调度器类型。如果满足以下任一条件,应用程序则不易受攻击:
authorizeHttpRequests()
或 AuthorizationFilter
。受影响版本的用户应采取以下缓解措施:
authorizeRequests().filterSecurityInterceptorOncePerRequest(false)
,而不是 authorizeHttpRequests().shouldFilterAllDispatcherTypes(true)
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 调度器类型上调用,这取决于您自行进行配置。
已修复此问题的版本包括:
此问题由奇安信集团网神安全实验室(SGLAB of Legendsec at Qi'anxin Group)的 Osword 负责任地识别并报告。
要报告 Spring 产品组合中的项目安全漏洞,请参阅安全政策