【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析

0x00 漏洞简介

https://www.openwall.com/lists/oss-security/2020/03/23/2

【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析_第1张图片

0x01 漏洞分析

翻查官方commit,在commit https://github.com/apache/shiro/commit/9762f97926ba99ac0d958e088cae3be8b657948d 中找到相关信息

【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析_第2张图片

 大致理解为Spring web在匹配url的时候会容错后面多余的/,而shiro匹配不上导致绕过,由国人tomsun28提交pull request

0x02 漏洞环境搭建

使用springboot+shiro搭建一个简单的demo,代码参考至https://segmentfault.com/a/1190000019440231(使用java原生的整合方式)

其中shiro使用的是1.4.0版本

在shiro-config中配置一个对url "/test/secret"的过滤,此url需要登录才能访问

【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析_第3张图片

同时在LoginController中配置以下代码,用于返回一个需要认证的信息

@GetMapping("/test/secret")
    public String secret(){
        return "secret";
    }

直接访问/test/secret,跳转到登录页面

【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析_第4张图片

 访问/test/secret/,返回了secret

【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析_第5张图片

官方修复也很简单就是把url后面的/也考虑进去了再进行匹配

顺便一提,使用maven拉取包的时候发现1.5.1版源码已经修复了,而1.5.0,1.4.2的源码却拉取不到

0x03 更新

 shiro的匹配符知识

【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析_第6张图片

看freebuf的分析(https://www.freebuf.com/vuls/231909.html),才发现自己看漏了。。。

后续还有一个绕过,具体commit看这里 https://github.com/apache/shiro/commit/3708d7907016bf2fa12691dff6ff0def1249b8ce

由于shiro先获取的url,然后会判断分号是否存在,如果存在就会把后面的删除,进入shiro匹配,匹配不上默认放行,之后Spring web对路径进行规范化从而访问到了相应的控制器

比如:

/fdsf;/../test/secret

【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析_第7张图片

0x04 实际攻击

当shiroFilter这么写

【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析_第8张图片

与及这么写

【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析_第9张图片

都存在绕过,也就是说当配置在二级目录下面的身份验证都存在被绕过的风险

只有这么写的时候,才不存在问题

【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析_第10张图片

你可能感兴趣的:(渗透思路收集)