CVE-2020-1957

描述

Apache Shiro 1.5.2 之前,当使用 Apache Shiro 和 Spring 动态控制器时,特制请求可能会导致身份验证绕过。

影响版本

Apache Shiro ≤ 1.5.1

复现过程

  1. 启动环境:

2. 访问/admin

3.改Path /xxx/..;/admin/

成功绕过权限验证

原理分析

1.访问/xxx/..;/admin/

2.断点调试

发现域名被截断,变成了/xxx/..

 

我们跟进

发现在这个地方还是/xxx/..;/admin/ 

但这里要注意这个decodeAndCleanUriString()函数,

 

我们接着跟进

可以看见对;符号后面的字符串进行了截断,只保留了/xxx/..

 

最终就不需要进行身份验证了,也就是完成了权限绕过

官方修复方案

再1.5.2版本中对其进行了修复,获取requestURI的方式从request.getRequestUri直接获取的方式更改为获取request的ContextPath,ServletPath,PathInfo,然后再重新拼接而成。

客户修复方案

更新Apache Shiro ≥ 1.5.2。