微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

0x00 漏洞简介

oss-security - [CVE-2020-1957] Apache Shiro 1.5.2 released

0x01 漏洞分析

翻查官方commit,在commit Merge pull request #201 from tomsun28/path-match-bug-fix · apache/shiro@9762f97 · GitHub 中找到相关信息

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

0x02 漏洞环境搭建

使用springboot+shiro搭建一个简单的demo,代码参考至Spring Boot 整合 Shiro ,两种方式全总结! - SegmentFault 思否(使用java原生的整合方式)

其中shiro使用的是1.4.0版本

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

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

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

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

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

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

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

0x03 更新

 shiro的匹配符知识

看freebuf的分析(Shiro权限绕过漏洞分析(CVE-2020-1957) - FreeBuf网络安全行业门户),才发现自己看漏了。。。

后续还有一个绕过,具体commit看这里 Add tests for WebUtils · apache/shiro@3708d79 · GitHub

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

比如:

/fdsf;/../test/secret

0x04 实际攻击

当shiroFilter这么写

与及这么写

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐