shiro权限绕过CVE-2020-1957


shiro权限绕过CVE-2020-1957

影响版本

1.5.2版本以下

初步分析

shiro通过拦截器来实现对用户访问权限的控制和拦截,有anon,authc拦截器

anon为匿名拦截器,不需要登录就能访问,一般用于静态资源,或者移动端接口
authc为登录拦截器,需要登录认证才能访问的资源

在shiro.ini编写匹配的url配置,将会拦截匹配的url,并执行响应的拦截器,实现对url的控制

1
2
3
[urls]
/index.html = anon
/user/** = authc

如上,访问/index.html时anon拦截器不会进行登录判断,而访问/user/xxx等页面时,authc拦截器会进行登录判断

url路径表达式通常为ant格式,路径通配符支持 ? * **

1
2
3
?:匹配一个字符
*:匹配零个或多个字符串
**:匹配路径中的零个或多个路径

/*可以匹配到/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

image-20210911212501781

image-20210912171647697

参考文章

Shiro 权限绕过漏洞分析(CVE-2020-1957)

Shiro 权限绕过漏洞分析(CVE-2020-1957)

CVE-2020-11989(玄武实验室)


文章作者: l0odrd
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 l0odrd !
  目录