漏洞描述

Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。

CVE-2020-1957,Spring Boot中使用Apache Shiro进行身份验证、权限控制时,可以精心构造恶意的URL,利用Apache Shiro和Spring Boot对URL的处理的差异化,可以绕过Apache Shiro对Spring Boot中的Servlet的权限控制,越权并实现未授权访问。

本篇文章不涉及漏洞成因以及分析,大家可以看这几位师傅的文章,因为太菜了;

https://blog.spoock.com/2020/05/09/cve-2020-1957/

https://xz.aliyun.com/t/8281#toc-2

影响版本

Apache Shiro <=1.5.2

漏洞复现

0x01

执行如下命令启动一个搭载Spring 2.2.2与Shiro 1.5.1的应用:

docker-compose up -d

环境启动后,访问http://your-ip:8080即可查看首页,不过不知道是什么原因,环境有点卡

这个应用中对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;
}

0x02

我们抓包或者直接去访问/admin/时,重定向到了登录页面

0x03

那么利用这个漏洞去构造恶意url来进行绕过权限校验,输入url为/xxx/..;/admin/

可以看到成功绕过登录访问成功,我们去可视化界面看一下,会更清楚一点,可以看到Logout按钮,说明我们登录成功了已经;