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正则表达式的两个关键特性:

  1. 元字符"."的行为: 默认情况下,正则表达式中的.元字符匹配除换行符(\n)之外的任何单个字符
  2. DOTALL模式: 当启用Pattern.DOTALL模式后,.将匹配包括换行符在内的任何字符

3.2 Shiro的请求匹配机制

在Shiro的shiro-core-1.9.0.jar中:

  • RegExPatternMatcher类负责请求路径匹配和拦截器参数解析
  • 该类使用带有.的正则表达式进行路径匹配
  • 当请求中包含换行符(\n\r)时,匹配逻辑会出现错误判断

3.3 漏洞触发条件

必须同时满足以下条件:

  1. 使用RegexRequestMatcher进行权限配置
  2. 配置的正则表达式中包含.元字符
  3. 未升级到Shiro 1.9.1或更高版本

4. 漏洞复现

4.1 环境搭建

建议使用Vulfocus提供的镜像环境:

  1. 启动靶场环境
  2. 访问给定的靶场地址

4.2 复现步骤

  1. 正常访问测试:

    • 直接访问敏感地址(如/admin)
    • 观察返回结果应为"访问被拒绝"
  2. 构造恶意请求:

    • 使用Burp Suite等工具捕获GET请求
    • 将请求发送到Repeater模块
    • 在请求路径中插入%0a(URL编码的换行符)

    示例:

    GET /admin%0a HTTP/1.1
    Host: target.com
    
  3. 验证绕过:

    • 发送修改后的请求
    • 成功绕过认证将返回"success"或其他敏感信息

5. 修复建议

5.1 官方修复方案

立即升级到Apache Shiro 1.9.1或更高版本

5.2 临时缓解措施

如果无法立即升级:

  1. 检查所有使用RegexRequestMatcher的权限配置
  2. 避免在正则表达式中使用.元字符
  3. 实现额外的请求验证逻辑,过滤包含特殊字符的请求

6. 深入技术分析

6.1 漏洞代码层面

在受影响版本的Shiro中:

  • RegExPatternMatcher未正确处理换行符
  • 请求路径规范化处理存在缺陷
  • 正则表达式编译时未考虑所有边界情况

6.2 攻击向量扩展

%0a外,攻击者可能尝试:

  • %0d(回车符)
  • 其他空白字符组合
  • 特殊Unicode字符

7. 参考资源

  1. Apache Shiro官方安全公告
  2. 助安社区技术分析(https://secself.com/)
  3. NVD漏洞数据库条目

8. 附录

8.1 相关技术术语

  • RegexRequestMatcher: Shiro中基于正则表达式的请求匹配器
  • Pattern.DOTALL: Java正则表达式模式标志,使.匹配所有字符包括换行符
  • URL编码: 将特殊字符转换为%后跟十六进制值的编码方式

8.2 测试Payload示例

/admin%0a
/user/%0a/list
/data%0d.json
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编码的换行符) 示例: 验证绕过 : 发送修改后的请求 成功绕过认证将返回"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示例