Java 安全:Apache Shiro 常见鉴权绕过漏洞分析与修复
Apache Shiro 作为 Java 生态中广泛使用的安全框架,其多个历史版本存在权限绕过风险。这些漏洞通常源于上下文路径处理不当、Web 容器与框架间 URL 解析差异以及路径匹配规则缺陷。攻击者可利用构造畸形路径、特殊字符注入或双重编码等方式绕过身份验证拦截器。
漏洞信息总览
| 漏洞编号 | 漏洞条件(版本 + 环境) | 核心原理 | 修复方案 |
|---|---|---|---|
| CVE-2016-6802 | Shiro < 1.3.2;Web 应用上下文路径非根目录 | 未对 ContextPath 做路径标准化,通过 ../ 篡改 RequestURI | 升级至 Shiro 1.3.2 及以上 |
| CVE-2020-1957 | Shiro < 1.5.2;与 Spring 框架结合使用 | Shiro 与 Spring 对 URL 处理的差异化(分号等特殊字符) | 升级至 Shiro 1.5.2 及以上 |
| CVE-2020-11989 | Shiro < 1.5.3;Web 应用上下文路径非根目录;后端 Web 容器解析差异 | 双重 URL 编码或分号路径构造,利用 URI 解析差异 | 升级至 Shiro 1.5.3 及以上 |
| CVE-2020-13933 | Shiro < 1.6.0;权限配置为 /path/*;后端接口为 /path/{vule} | 通过 /xxx/;/admin 特制 URL 绕过认证 | 升级至 Shiro 1.6.0 及以上 |
| CVE-2020-17510 | Shiro <= 1.7.0;SpringBoot >= 2.4.0;权限配置为 /path/* | 通过 %2e 等编码变形 URL 绕过 | 升级至 Shiro 1.7.1 及以上 |
| CVE-2020-17523 | Shiro <= 1.7.0;权限配置为 /path/*;后端接口为 /path/{vule} | 通过 ..;/admin 混合路径请求绕过 | 升级至 Shiro 1.7.1 及以上 |
CVE-2016-6802:ContextPath 路径穿越
漏洞原理
Shiro 1.3.2 之前版本未对 ContextPath 做路径标准化处理。当 Web 应用配置了非根目录的上下文路径时,攻击者可通过包含 /任意目录名/../ 的畸形路径,篡改 RequestURI,从而绕过 Servlet 过滤器的权限校验。
复现步骤
首先,在项目中引入低于 1.3.2 版本的 Shiro 依赖:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.3.1
org.apache.shiro
shiro-spring
1.3.1


