其他
原创 | 浅谈Apache与CVE-2023-20860
前言
一般情况下,开发者配置鉴权时,可能都会遵循一个原则,就是“优先使用/**认证兜底”,明确哪些接口无需认证,而不是明确哪些接口需要认证。
在Spring Controller中,以下两个路由访问是等价的(熟悉spring framework源码的话,会知道其实都是在解析pattern前做了补全的处理(不论是AntPathMatcher还是高版本的PathPattern)):
@GetMapping("/admin/*")
@GetMapping("admin/*")
1.1 关于CVE-2023-20860
前段时间Spring官方发布了Spring Framework 身份认证绕过漏洞(CVE-2023-20860),当Spring Security使用mvcRequestMatcher配置并将作为匹配模式时,在Spring Security 和 Spring MVC 之间会发生模式不匹配,最终可能导致身份认证绕过。首先简单回顾下漏洞的原理:
对比commit可以看到在调用PathPattern的match之前,首先判断pattern是否以/开头,如果不是的话进行补全(以修复版本spring-webmvc-5.3.26为例):
PS:下面代码块中的/admin/就是pattern:
httpSecurity.authorizeRequests().mvcMatchers("/admin/**").authenticated();
httpSecurity.authorizeRequests().mvcMatchers("**").authenticated();
结合影响的版本可以确定对应的Spring应用使用的是PathPattern进行解析。而MvcRequestMatcher实际上使用Spring MVC的HandlerMappingIntrospector来匹配路径并提取变量,对应的影响判断在匹配pattern跟请求的path时使用的也是PathPattern。根据PathPattern的解析方式,大致可以知道漏洞的成因了。
matches = pathIndex + 1 >= matchingContext.pathLength && (this.variableNames.isEmpty() || textToMatch.length() > 0);
if (!matches && matchingContext.isMatchOptionalTrailingSeparator()) {
matches = (this.variableNames.isEmpty() || textToMatch.length() > 0) && pathIndex + 2 >= matchingContext.pathLength && matchingContext.isSeparator(pathIndex + 1);
}
特殊场景下的shiro auth Bypass
2.1 相关场景
@Bean
ShiroFilterFactoryBean shiroFilterFactoryBean(){
ShiroFilterConfiguration shiroFilterConfiguration = new ShiroFilterConfiguration();
shiroFilterConfiguration.setStaticSecurityManagerEnabled(true);
shiroFilterConfiguration.setFilterOncePerRequest(true);
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
bean.setShiroFilterConfiguration(shiroFilterConfiguration);
bean.setSecurityManager(securityManager());
bean.setLoginUrl("/login");
bean.setSuccessUrl("/index");
bean.setUnauthorizedUrl("/unauthorizedurl");
Map<String, String> map = new LinkedHashMap<>();
map.put("/**", "authc");
map.put("/doLogin", "anon");
bean.setFilterChainDefinitionMap(map);
return bean;
}
@GetMapping("/admin/page")
public String admin() {
return "admin page";
}
2.2 具体原理
其他
往期推荐