描述
Apache Shiro 1.1.0之前的版本和JSecurity 0.9.x在将URI路径与shiro.ini文件中的条目进行比较之前没有规范化URI路径,这使得远程攻击者能够通过特制的请求绕过预期的访问限制,如/./ account/index.jsp URI。
影响版本
Apache Shiro ≤ 1.0.0
复现过程
- 启动环境:
![](api/attachments/dkvyayX2Jc7j/image/image.png)
2. 访问/admin
![](api/attachments/XqFDiNMTs4od/image/image.png)
3.改Path,加入/.
![](api/attachments/z2ptZ0YEd2ve/image/image.png)
成功登录
原理分析
1.构造POC
![](api/attachments/DCQSxxtXN3Wk/image/image.png)
2.断点调试
![](api/attachments/2tHNCXI8a9vx/image/image.png)
直接使用getPathWithinApplication()获得URL,没有对URL进行路径标准化,导致出现了/./admin
这种URL String
![](api/attachments/sA4SSn4YPpO8/image/image.png)
接着就会被 pathPattern=/**
配置
![](api/attachments/LD6plvvY0noe/image/image.png)
根据配置文件知,/**
是不需要进行登录验证的,而/./admin
等于/admin
,但却因为被错误配置而绕过了登录验证,造成路径越权访问。
官方修复方案
增加路径标准化方法
![](api/attachments/YxsS2q2FrvSM/image/image.png)
客户修复方案
更新Apache Shiro ≥ 1.1.0。