0


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

标签: 安全 web安全 java

本文转载自: https://blog.csdn.net/lecoder/article/details/127393098
版权归原作者 乐码 所有, 如有侵权,请联系我们删除。

“Shiro身份验证绕过漏洞及修复方案”的评论:

还没有评论