漏洞概述
CVE-2020-1957
,Spring Boot
中使用 Apache Shiro
进行身份验证、权限控制时,可以精心构造恶意的URL,利用 Apache Shiro
和 Spring Boot
对URL
的处理的差异化,可以绕过 Apache Shiro
对 Spring Boot
中的 Servlet
的权限控制,越权并实现未授权访问。
影响版本
Apache Shiro < 1.5.1
漏洞复现
使用kali
打开vulhub
靶场的CVE-2020-1957
访问虚拟机IP:8080
刷新页面,抓取数据包,尝试访问/admin
目录,回显302并跳转至登录页面:
构造恶意请求/xxx/..;/admin/
,即可绕过权限校验,访问到管理页面:
漏洞成因
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;
}
客户端请求URL: /xxx/..;/admin/
,Shrio 内部处理得到校验URL为 /xxxx/..
,校验通过
SpringBoot 处理 /xxx/..;/admin/
, 最终请求 /admin/
, 成功访问了后台请求。