Shiro 身份认证绕过漏洞 CVE-2022-32532
字数 1407 2025-08-11 00:08:50
Apache Shiro 身份认证绕过漏洞 (CVE-2022-32532) 技术分析文档
1. 漏洞概述
漏洞编号: CVE-2022-32532
漏洞类型: 身份认证绕过
影响组件: Apache Shiro 安全框架
披露日期: 2022年6月29日
危险等级: 高危
漏洞描述: 当Apache Shiro中使用RegexRequestMatcher进行权限配置且正则表达式中包含"."时,攻击者可构造恶意请求绕过身份认证,导致权限验证失效。
2. 受影响版本
- Apache Shiro < 1.9.1 的所有版本
3. 技术原理分析
3.1 正则表达式匹配机制
漏洞根源在于Java正则表达式的两个关键特性:
- 元字符"."的行为: 默认情况下,正则表达式中的
.元字符匹配除换行符(\n)之外的任何单个字符 - DOTALL模式: 当启用
Pattern.DOTALL模式后,.将匹配包括换行符在内的任何字符
3.2 Shiro的请求匹配机制
在Shiro的shiro-core-1.9.0.jar中:
RegExPatternMatcher类负责请求路径匹配和拦截器参数解析- 该类使用带有
.的正则表达式进行路径匹配 - 当请求中包含换行符(
\n或\r)时,匹配逻辑会出现错误判断
3.3 漏洞触发条件
必须同时满足以下条件:
- 使用
RegexRequestMatcher进行权限配置 - 配置的正则表达式中包含
.元字符 - 未升级到Shiro 1.9.1或更高版本
4. 漏洞复现
4.1 环境搭建
建议使用Vulfocus提供的镜像环境:
- 启动靶场环境
- 访问给定的靶场地址
4.2 复现步骤
-
正常访问测试:
- 直接访问敏感地址(如/admin)
- 观察返回结果应为"访问被拒绝"
-
构造恶意请求:
- 使用Burp Suite等工具捕获GET请求
- 将请求发送到Repeater模块
- 在请求路径中插入
%0a(URL编码的换行符)
示例:
GET /admin%0a HTTP/1.1 Host: target.com -
验证绕过:
- 发送修改后的请求
- 成功绕过认证将返回"success"或其他敏感信息
5. 修复建议
5.1 官方修复方案
立即升级到Apache Shiro 1.9.1或更高版本
5.2 临时缓解措施
如果无法立即升级:
- 检查所有使用
RegexRequestMatcher的权限配置 - 避免在正则表达式中使用
.元字符 - 实现额外的请求验证逻辑,过滤包含特殊字符的请求
6. 深入技术分析
6.1 漏洞代码层面
在受影响版本的Shiro中:
RegExPatternMatcher未正确处理换行符- 请求路径规范化处理存在缺陷
- 正则表达式编译时未考虑所有边界情况
6.2 攻击向量扩展
除%0a外,攻击者可能尝试:
%0d(回车符)- 其他空白字符组合
- 特殊Unicode字符
7. 参考资源
- Apache Shiro官方安全公告
- 助安社区技术分析(https://secself.com/)
- NVD漏洞数据库条目
8. 附录
8.1 相关技术术语
- RegexRequestMatcher: Shiro中基于正则表达式的请求匹配器
- Pattern.DOTALL: Java正则表达式模式标志,使
.匹配所有字符包括换行符 - URL编码: 将特殊字符转换为%后跟十六进制值的编码方式
8.2 测试Payload示例
/admin%0a
/user/%0a/list
/data%0d.json