0x00 漏洞简介
https://www.openwall.com/lists/oss-security/2020/03/23/2
0x01 漏洞分析
翻查官方 commit, 在 commit https://github.com/apache/shiro/commit/9762f97926ba99ac0d958e088cae3be8b657948d 中找到相关信息
大致理解为 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 需要登录才能访问
同时在 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 总结
个人认为此漏洞实际情况较为鸡肋, 在身份验证控制的时候应该都是先写不需要登录的, 最后来一个全范围匹配, 如下:
这样就不存在这个问题了
本人技术水平有限, 如有不妥之处还望谅解
来源: http://www.bubuko.com/infodetail-3478654.html