heapdump泄露Shiro key从而RCE
字数 1442 2025-08-26 22:11:57

Heapdump泄露Shiro Key导致RCE漏洞分析与利用

1. 漏洞概述

本漏洞是一个组合漏洞,通过Spring应用的heapdump文件泄露获取Shiro的加密密钥,进而实现远程代码执行(RCE)。该漏洞需要满足以下条件:

  • 目标系统使用Spring框架并集成了Apache Shiro作为安全框架
  • 存在heapdump文件泄露(通常通过/actuator/heapdump端点)
  • 系统中存在可利用的反序列化链

2. 漏洞原理

2.1 背景知识

  1. Shiro RememberMe功能:Apache Shiro提供了"记住我"功能,使用CookieRememberMeManager管理,通过AES加密存储用户身份信息。

  2. Shiro密钥生成机制

    • Shiro 1.2.4及以上版本默认使用随机生成的密钥
    • 密钥在每次Web环境启动时生成,重启前保持不变
    • 密钥存储在JVM内存中
  3. Heapdump文件

    • 是JVM内存的完整快照
    • 包含运行时的所有对象和变量信息
    • Spring Actuator可能暴露heapdump端点

2.2 漏洞成因

通过分析heapdump文件可以提取出Shiro的加密密钥,结合Shiro的反序列化漏洞实现RCE。

3. 环境搭建

测试环境已在GitHub开源:

https://github.com/P4r4d1se/heapdump_shiro_vuln

4. 漏洞利用步骤

4.1 获取heapdump文件

访问目标系统的heapdump端点(通常为/actuator/heapdump)下载heapdump文件。

4.2 提取Shiro密钥

有两种主要方法从heapdump中提取Shiro密钥:

方法一:使用JDumpSpider工具

  1. 下载工具:
    https://github.com/whwlsfb/JDumpSpider
    
  2. 运行命令:
    java -jar JDumpSpider.jar heapdump
    
  3. 在输出中查找ShiroKey字段

方法二:使用jvisualvm工具

  1. 打开Java自带的jvisualvm工具(位于JDK目录/bin/jvisualvm.exe)
  2. 加载heapdump文件
  3. 在过滤器中输入:org.apache.shiro.web.mgt.CookieRememberMeManager
  4. 查找16字节的密钥值

4.3 密钥格式转换

获取到的密钥通常需要转换为base64编码格式才能用于利用。使用以下Python脚本转换:

import base64
import struct

print(base64.b64encode(struct.pack('<bbbbbbbbbbbbbbbb', 109, -96, 12, -115, 33, 59, 24, 112, 44, 124, 56, 110, -15, 59, 1, -41)))

4.4 利用密钥进行RCE

使用获取到的Shiro密钥,结合Shiro反序列化漏洞利用工具(如shiro-exploit)进行攻击。

5. 验证与防御

5.1 漏洞验证

  1. 重启服务器后再次获取heapdump,验证密钥是否变化
  2. 使用新密钥测试是否仍可利用

5.2 防御措施

  1. 保护heapdump端点

    • 禁用或限制访问Spring Actuator的heapdump端点
    • 添加认证和授权机制
  2. Shiro安全配置

    • 自定义强密钥而非使用随机生成
    • 定期轮换密钥
    • 禁用RememberMe功能(如不需要)
  3. JVM安全

    • 限制敏感信息在内存中的存储时间
    • 考虑使用内存加密技术
  4. 反序列化防护

    • 更新Shiro到最新版本
    • 配置反序列化过滤器

6. 补充说明

  1. 该漏洞不特定于Shiro版本,只要有密钥泄露风险就可能存在
  2. 每次服务器重启会生成新的随机密钥,之前的密钥将失效
  3. 实际利用需要目标系统存在可用的反序列化利用链

7. 参考工具

  1. JDumpSpider: https://github.com/whwlsfb/JDumpSpider
  2. jvisualvm: JDK自带工具
  3. Shiro反序列化利用工具: 如shiro-exploit等
Heapdump泄露Shiro Key导致RCE漏洞分析与利用 1. 漏洞概述 本漏洞是一个组合漏洞,通过Spring应用的heapdump文件泄露获取Shiro的加密密钥,进而实现远程代码执行(RCE)。该漏洞需要满足以下条件: 目标系统使用Spring框架并集成了Apache Shiro作为安全框架 存在heapdump文件泄露(通常通过/actuator/heapdump端点) 系统中存在可利用的反序列化链 2. 漏洞原理 2.1 背景知识 Shiro RememberMe功能 :Apache Shiro提供了"记住我"功能,使用CookieRememberMeManager管理,通过AES加密存储用户身份信息。 Shiro密钥生成机制 : Shiro 1.2.4及以上版本默认使用随机生成的密钥 密钥在每次Web环境启动时生成,重启前保持不变 密钥存储在JVM内存中 Heapdump文件 : 是JVM内存的完整快照 包含运行时的所有对象和变量信息 Spring Actuator可能暴露heapdump端点 2.2 漏洞成因 通过分析heapdump文件可以提取出Shiro的加密密钥,结合Shiro的反序列化漏洞实现RCE。 3. 环境搭建 测试环境已在GitHub开源: 4. 漏洞利用步骤 4.1 获取heapdump文件 访问目标系统的heapdump端点(通常为 /actuator/heapdump )下载heapdump文件。 4.2 提取Shiro密钥 有两种主要方法从heapdump中提取Shiro密钥: 方法一:使用JDumpSpider工具 下载工具: 运行命令: 在输出中查找 ShiroKey 字段 方法二:使用jvisualvm工具 打开Java自带的jvisualvm工具(位于JDK目录/bin/jvisualvm.exe) 加载heapdump文件 在过滤器中输入: org.apache.shiro.web.mgt.CookieRememberMeManager 查找16字节的密钥值 4.3 密钥格式转换 获取到的密钥通常需要转换为base64编码格式才能用于利用。使用以下Python脚本转换: 4.4 利用密钥进行RCE 使用获取到的Shiro密钥,结合Shiro反序列化漏洞利用工具(如shiro-exploit)进行攻击。 5. 验证与防御 5.1 漏洞验证 重启服务器后再次获取heapdump,验证密钥是否变化 使用新密钥测试是否仍可利用 5.2 防御措施 保护heapdump端点 : 禁用或限制访问Spring Actuator的heapdump端点 添加认证和授权机制 Shiro安全配置 : 自定义强密钥而非使用随机生成 定期轮换密钥 禁用RememberMe功能(如不需要) JVM安全 : 限制敏感信息在内存中的存储时间 考虑使用内存加密技术 反序列化防护 : 更新Shiro到最新版本 配置反序列化过滤器 6. 补充说明 该漏洞不特定于Shiro版本,只要有密钥泄露风险就可能存在 每次服务器重启会生成新的随机密钥,之前的密钥将失效 实际利用需要目标系统存在可用的反序列化利用链 7. 参考工具 JDumpSpider: https://github.com/whwlsfb/JDumpSpider jvisualvm: JDK自带工具 Shiro反序列化利用工具: 如shiro-exploit等