Shiro身份验证绕过漏洞及修复方案

近期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博客

3、java filter里filter-mapping中的dispatcher作用_qq_20936333的博客-CSDN博客_filter-mapping

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值