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/,返回了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 举报,一经查实,本站将立刻删除。