一文读懂面试官都在问的shiro漏洞
字数 1914 2025-08-10 22:07:53

Apache Shiro 安全漏洞全面解析与防御指南

一、Shiro 框架概述

Apache Shiro 是一个强大易用的 Java 安全框架,提供以下核心功能:

  • 认证(Authentication):验证用户身份
  • 授权(Authorization):访问控制管理
  • 会话管理(Session Management):用户会话管理
  • 加密(Cryptography):数据安全保护
  • Remember Me:记住用户身份功能

二、Shiro-550 反序列化漏洞 (CVE-2016-4437)

漏洞简介

  • 由RememberMe功能的反序列化导致RCE
  • 根本原因:默认AES加密密钥硬编码在源码中
  • 影响版本:Apache Shiro ≤ 1.2.4

漏洞特征

  • Cookie中存在rememberMe字段
  • 响应包中可能包含rememberMe相关内容

漏洞原理

  1. 加密流程

    • 用户登录并勾选"Remember Me"
    • Shiro验证通过后序列化用户身份
    • 使用硬编码AES密钥加密序列化数据
    • Base64编码后存入rememberMe Cookie
  2. 解密流程

    • 服务端获取rememberMe Cookie值
    • Base64解码后AES解密
    • 反序列化获取用户身份

漏洞复现步骤

  1. 识别目标系统使用Shiro框架
  2. 使用工具爆破加密密钥
  3. 构造恶意序列化对象
  4. 生成rememberMe Cookie发送给目标
  5. 实现远程代码执行

修复建议

  1. 升级到Shiro 1.2.4以上版本
  2. 不使用默认加密密钥,改为随机生成
  3. 禁用RememberMe功能(如非必要)

三、Shiro-721 反序列化漏洞 (CVE-2019-12422)

与Shiro-550的区别

  • Shiro-550:通过爆破密钥利用
  • Shiro-721:密钥随机生成,需Padding Oracle攻击
  • Shiro-721需要有效的用户Cookie作为攻击前提

漏洞特征

  • URL中包含Shiro相关字段
  • Cookie中存在rememberMe字段
  • 响应包中包含rememberMe相关内容

漏洞原理

  • 使用AES-128-CBC模式加密rememberMe字段
  • 利用Padding Oracle Attack构造恶意rememberMe
  • 无需知道加密密钥即可实施攻击

攻击流程

  1. 获取有效的RememberMe Cookie
  2. 使用ysoserial生成Payload
  3. 以RememberMe值为前缀进行Padding Oracle攻击
  4. 发送精心构造的rememberMe Cookie实现RCE

修复建议

  1. 升级到最新版本Shiro
  2. 禁用RememberMe功能(如非必要)
  3. 实施严格的输入验证

四、Shiro 认证绕过漏洞 (CVE-2020-1957)

漏洞原理

  • 在Shiro <1.5.2版本中
  • 构造/xxx/..;/admin/格式URL可绕过目录权限限制
  • Shiro校验/xxxx/..通过,Spring处理为/admin/

复现步骤

  1. 直接访问受限URL(如/admin/)被拦截
  2. 构造恶意URL:/xxx/..;/admin/
  3. 成功绕过权限访问后台

修复方案

升级到Shiro 1.5.2及以上版本

五、Shiro 身份验证绕过 (CVE-2020-13933)

漏洞简介

  • CVE-2020-11989修复补丁存在缺陷
  • Shiro ≤1.5.3版本存在URL处理差异
  • 通过;(%3b)可绕过身份验证

复现方法

  1. 正常访问受限界面被拦截
  2. 使用/admin/%3badmin格式URL
  3. 成功绕过权限验证

六、Shiro 授权绕过 (CVE-2022-32532)

漏洞概述

  • 影响版本:Apache Shiro <1.9.1
  • 当使用RegexRequestMatcher且正则含.
  • 可能被构造恶意请求绕过授权

利用方法

  1. 访问受限资源被拦截
  2. 修改请求如/permit/%0any
  3. 成功绕过权限检查

修复方案

升级到Shiro 1.9.1及以上版本

七、综合防御策略

  1. 及时更新:保持Shiro版本最新
  2. 密钥管理
    • 不使用默认密钥
    • 定期更换加密密钥
  3. 功能限制
    • 禁用不必要的RememberMe功能
    • 限制反序列化类白名单
  4. 输入验证
    • 严格校验URL路径
    • 过滤特殊字符如;..
  5. 安全配置
    • 正确配置权限规则
    • 避免使用含.的宽松正则
  6. 监控审计
    • 记录异常访问尝试
    • 监控可疑的rememberMe字段使用

通过全面了解这些漏洞原理和防御措施,可以有效提升Apache Shiro框架的安全性,防止攻击者利用这些漏洞危害系统安全。

Apache Shiro 安全漏洞全面解析与防御指南 一、Shiro 框架概述 Apache Shiro 是一个强大易用的 Java 安全框架,提供以下核心功能: 认证(Authentication) :验证用户身份 授权(Authorization) :访问控制管理 会话管理(Session Management) :用户会话管理 加密(Cryptography) :数据安全保护 Remember Me :记住用户身份功能 二、Shiro-550 反序列化漏洞 (CVE-2016-4437) 漏洞简介 由RememberMe功能的反序列化导致RCE 根本原因:默认AES加密密钥硬编码在源码中 影响版本:Apache Shiro ≤ 1.2.4 漏洞特征 Cookie中存在rememberMe字段 响应包中可能包含rememberMe相关内容 漏洞原理 加密流程 : 用户登录并勾选"Remember Me" Shiro验证通过后序列化用户身份 使用硬编码AES密钥加密序列化数据 Base64编码后存入rememberMe Cookie 解密流程 : 服务端获取rememberMe Cookie值 Base64解码后AES解密 反序列化获取用户身份 漏洞复现步骤 识别目标系统使用Shiro框架 使用工具爆破加密密钥 构造恶意序列化对象 生成rememberMe Cookie发送给目标 实现远程代码执行 修复建议 升级到Shiro 1.2.4以上版本 不使用默认加密密钥,改为随机生成 禁用RememberMe功能(如非必要) 三、Shiro-721 反序列化漏洞 (CVE-2019-12422) 与Shiro-550的区别 Shiro-550:通过爆破密钥利用 Shiro-721:密钥随机生成,需Padding Oracle攻击 Shiro-721需要有效的用户Cookie作为攻击前提 漏洞特征 URL中包含Shiro相关字段 Cookie中存在rememberMe字段 响应包中包含rememberMe相关内容 漏洞原理 使用AES-128-CBC模式加密rememberMe字段 利用Padding Oracle Attack构造恶意rememberMe 无需知道加密密钥即可实施攻击 攻击流程 获取有效的RememberMe Cookie 使用ysoserial生成Payload 以RememberMe值为前缀进行Padding Oracle攻击 发送精心构造的rememberMe Cookie实现RCE 修复建议 升级到最新版本Shiro 禁用RememberMe功能(如非必要) 实施严格的输入验证 四、Shiro 认证绕过漏洞 (CVE-2020-1957) 漏洞原理 在Shiro <1.5.2版本中 构造 /xxx/..;/admin/ 格式URL可绕过目录权限限制 Shiro校验 /xxxx/.. 通过,Spring处理为 /admin/ 复现步骤 直接访问受限URL(如 /admin/ )被拦截 构造恶意URL: /xxx/..;/admin/ 成功绕过权限访问后台 修复方案 升级到Shiro 1.5.2及以上版本 五、Shiro 身份验证绕过 (CVE-2020-13933) 漏洞简介 CVE-2020-11989修复补丁存在缺陷 Shiro ≤1.5.3版本存在URL处理差异 通过 ; (%3b)可绕过身份验证 复现方法 正常访问受限界面被拦截 使用 /admin/%3badmin 格式URL 成功绕过权限验证 六、Shiro 授权绕过 (CVE-2022-32532) 漏洞概述 影响版本:Apache Shiro <1.9.1 当使用RegexRequestMatcher且正则含 . 时 可能被构造恶意请求绕过授权 利用方法 访问受限资源被拦截 修改请求如 /permit/%0any 成功绕过权限检查 修复方案 升级到Shiro 1.9.1及以上版本 七、综合防御策略 及时更新 :保持Shiro版本最新 密钥管理 : 不使用默认密钥 定期更换加密密钥 功能限制 : 禁用不必要的RememberMe功能 限制反序列化类白名单 输入验证 : 严格校验URL路径 过滤特殊字符如 ; 、 .. 等 安全配置 : 正确配置权限规则 避免使用含 . 的宽松正则 监控审计 : 记录异常访问尝试 监控可疑的rememberMe字段使用 通过全面了解这些漏洞原理和防御措施,可以有效提升Apache Shiro框架的安全性,防止攻击者利用这些漏洞危害系统安全。