Shiro权限绕过(CVE-2020-1957)漏洞
Shiro权限绕过(CVE-2020-1957)漏洞
漏洞描述
在Apache Shiro 1.5.2以前的版本中,在使用Spring动态控制器时,攻击者通过构造..;这样的跳转,可以绕过Shiro中对目录的权限限制。
搭建漏洞复现环境
git clone --depth 1 https://github.com/vulhub/vulhub.git
cd ~/vulhub/shiro/CVE-2020-1957
sudo docker compose up -d
利用前提
需要已知是Sping 和shiro框架同时使用且需要符合shiro版本<1.5.2。
漏洞利用
该靶场的权限配置:
@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;
}
直接访问 /admin/ 会跳转302:

但只要 /xxx/..;/admin/
则可以绕过权限校验,未授权访问:

该漏洞产生的根本原因是 Apache Shiro 与 Spring Framework 对 URL 路径的解析逻辑不一致。
shiro会取分号前面的内容来判断,Spring移除分号进行请求。
修复建议
升级shiro版本之1.5.2以上。
设置访问admin/**这些敏感路径的Ip白名单。
参考文章:

浙公网安备 33010602011771号