一.漏洞描述
Apache Shiro 是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
CVE-2020-1957,Spring Boot中使用 Apache Shiro 进行身份验证、权限控制时,可以精心构造恶意的URL,利用 Apache Shiro 和 Spring Boot 对URL的处理的差异化,可以绕过 Apache Shiro 对 Spring Boot 中的 Servlet 的权限控制,越权并实现未授权访问
二.漏洞影响
Apache Shiro < 1.5.1
三.漏洞复现
利用vulhub丰富的漏洞库 搭建一个搭载spring 2.2.2与Shiro 1.5.1的应用:
环境搭建好以后,访问 ip:端口 即可有如下效果:
这个应用中对URL权限的配置如下:
@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
chainDefinition.addPathDefinition("/login.html", "authc"); // need to accept POSTs from the login form
chainDefinition.addPathDefinition("/logout", "logout");
chainDefinition.addPathDefinition("/admin/**", "authc");
return chainDefinition;
}
使用bp抓包,访问/admin/ 目录==》具体操作是 :
在重放这个模块 GET / HTTP/1.1 ==> GET /admin HTTP/1.1
如下效果:会显示302 且会跳转到登录页面
然后 利用漏洞 构造恶意请求 /xxx/..;/admin/ 即可绕过权限校验,访问到管理页面:
URL请求过程:
- 客户端请求URL:
/xxx/..;/admin/
- Shrio 内部处理得到校验URL为
/xxxx/..
,校验通过 - SpringBoot 处理
/xxx/..;/admin/
, 最终请求/admin/
, 成功访问了后台请求。