近期Shiro修复了一个身份验证绕过漏洞(CVE-2022-40664),1.10.0之前的版本在请求forward或include时不进行拦截鉴权。
下方测试代码,方法1(noauth)不需要权限,方法2(needauth)配置了authc,方法1转发方法2,则可以绕过方法2的鉴权。
/**
* 不需要身份验证(鉴权)的方法
*/
@RequestMapping(value ="/shiro/noauth", method = RequestMethod.GET)
public String noauth() {
return "forward:needauth";
}
/**
* 需要身份验证(鉴权)的方法
*/
@RequestMapping(value ="/shiro/needauth",method=RequestMethod.GET)
@ResponseBody
public String needauth() {
return "needauth";
}
解决方案
1、springboot项目
@Bean
public FilterRegistrationBean testFilterRegistration(SecurityManager securityManager) throws Exception {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
Map<String, String> map = new HashMap<>();
map.put("/shiro/needauth", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(shiroFilterFactoryBean.getObject());
registration.addUrlPatterns("/*");
registration.setName("shiroFilter");
registration.setOrder(1);
// 表示该Filter可以处理所有类型(INCLUDE,FORWARD,REQUEST,ASYNC,ERROR)的请求
registration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class));
return registration;
}
springboot集成ShiroFilter时,默认情况下ShiroFilter不拦截Forward或者Include请求,如果在springboot下使用要对Forward或Include拦截鉴权,不仅要将shiro-spring版本升级到1.10.0,而且要手动配置FilterRegistrationBean的DispatcherType。
2、普通web项目
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
<!-- 默认是REQUEST -->
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
普通web项目在web.xml里手动设置<dispatcher>。
参考链接:
1、1.10.0 available with fix CVE-2022-40664 | Apache Shiro
2、CVE-2022-40664 ShiroFilter1.7和1.10对于forward请求的处理_李有乾的博客-CSDN博客文章来源:https://www.toymoban.com/news/detail-584955.html
3、java filter里filter-mapping中的dispatcher作用_qq_20936333的博客-CSDN博客_filter-mapping文章来源地址https://www.toymoban.com/news/detail-584955.html
到了这里,关于Shiro身份验证绕过漏洞及修复方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!