shiro-CVE-2022-32532漏洞复现
字数 1664 2025-08-10 16:34:22
Apache Shiro CVE-2022-32532 权限绕过漏洞分析与复现指南
1. 漏洞概述
1.1 Apache Shiro 简介
Apache Shiro 是一个强大且易于使用的 Java 安全框架,提供以下主要功能:
- 认证(Authentication): 验证用户身份
- 授权(Authorization): 定义用户允许执行的操作和访问的资源
- 会话管理(Session Management): 管理用户会话生命周期
- 密码加密(Password Encryption): 提供安全的密码存储和验证机制
- 单点登录(Single Sign-On): 支持多应用间共享身份验证信息
1.2 漏洞描述
CVE-2022-32532 是 Apache Shiro 中的一个权限绕过漏洞,于2022年6月29日由官方披露。当满足以下条件时,攻击者可绕过身份认证:
- 使用
RegexRequestMatcher进行权限配置 - 正则表达式中包含
.元字符 - 攻击者构造包含换行符的恶意请求
受影响版本: Apache Shiro < 1.9.1
2. 漏洞原理分析
2.1 技术细节
漏洞核心在于 Java 正则表达式的 . 元字符默认不匹配换行符(\n, \r):
-
在漏洞场景中,自定义 Filter 增加了权限认证逻辑:
- 检查请求头中的 Token 是否匹配
- 不存在或错误的 Token 会导致认证失败
-
Java 正则表达式特性:
.默认不匹配\n和\r- 要匹配所有字符需使用
(.|\n)或Pattern.DOTALL模式
-
Shiro 实现问题:
shiro-core-1.9.0.jar中的RegExPatternMatcher类- 使用带
.的正则表达式进行路径匹配 - 当请求路径(source)包含
\r或\n时,匹配逻辑出错
2.2 典型漏洞配置
- 配置自定义
AccessControlFilter实现类 - 设置
PatternMatcher为RegExPatternMatcher - 自定义
MyShiroFilterFactoryBean继承自ShiroFilterFactoryBean - 设置匹配规则为
/permit/.*(拦截/permit/下所有路径)
3. 漏洞复现
3.1 环境搭建
推荐环境:
- 操作系统: Kali Linux 2023
- 工具:
- Docker
- Vulfocus (在线靶场)
- Burp Suite
环境搭建步骤:
- 安装 Docker
- 部署 Vulfocus 靶场环境
- 参考: Vulfocus 靶机环境搭建
- 解决同步问题(如需要)
- 参考: Vulfocus同步失败解决方法
3.2 漏洞验证步骤
-
正常请求(被拦截):
GET /permit/any HTTP/1.1返回: 403 拒绝访问
-
带Token的合法请求:
GET /permit/any HTTP/1.1 Token: 4ra1n返回: 200 成功
-
利用漏洞绕过(关键步骤):
GET /permit/a%0any HTTP/1.1%0a是 URL 编码的换行符\n- 由于正则
.不匹配\n,导致权限检查被绕过 - 返回: 200 成功(未授权访问)
4. 修复建议
- 升级版本: 升级至 Apache Shiro 1.9.1 或更高版本
- 代码审查: 检查所有使用
RegexRequestMatcher的地方 - 正则修正: 如需匹配所有字符,使用
(.|\n)或启用Pattern.DOTALL模式 - 防御措施:
- 验证输入中是否包含换行符
- 实现多层防御机制
5. 参考资源
6. 总结
CVE-2022-32532 漏洞展示了框架级安全组件中细微实现差异可能导致严重安全问题的典型案例。开发人员应:
- 充分理解所用安全组件的实现细节
- 及时关注安全公告和更新
- 实施深度防御策略
- 定期进行安全审计和渗透测试