shiro权限绕过CVE-2020-1957
影响版本
1.5.2版本以下
初步分析
shiro通过拦截器来实现对用户访问权限的控制和拦截,有anon,authc拦截器
anon为匿名拦截器,不需要登录就能访问,一般用于静态资源,或者移动端接口
authc为登录拦截器,需要登录认证才能访问的资源
在shiro.ini编写匹配的url配置,将会拦截匹配的url,并执行响应的拦截器,实现对url的控制
1 | [urls] |
如上,访问/index.html时anon拦截器不会进行登录判断,而访问/user/xxx等页面时,authc拦截器会进行登录判断
url路径表达式通常为ant格式,路径通配符支持 ? * **
1 | ?:匹配一个字符 |
/*可以匹配到/admin,而匹配不到/admin/因为*不能匹配路径
这是如果对/admin设置了authc拦截器,访问该页面会进行登录判断;当请求的/admin/时会因为/*无法正确路径,会放行进入spring(Servlet)拦截器,最终/admin和/admin/访问到的资源是一样的
或者说是spring web匹配url的时候没有匹配上/导致绕过
请求的URL在整个项目的传入传递过程中,在使用了shiro的项目,是我们请求的URL(URL1),进过shiro权限检验(URL2), 最后到springboot项目找到路由来处理(URL3),漏洞就出现在URL1,URL2和URL3 有可能不是同一个URL,这就导致我们能绕过shiro的校验,直接访问后端需要首选的URL

