Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437)

一:漏洞概述

Apache Shiro 1.2.4 及以下版本存在反序列化漏洞(CVE-2016-4437),攻击者可利用该漏洞通过伪造的 RememberMe Cookie 触发恶意代码执行。漏洞根源在于 Shiro 使用了固定 AES 加密密钥加密用户身份信息,导致攻击者可构造恶意序列化数据,利用已知密钥加密后植入 Cookie,触发服务端反序列化漏洞。

二:环境搭建

vul靶场搭建:

三:漏洞原理分析

1. RememberMe 机制流程

用户登录时若勾选"记住我",Shiro 会执行以下流程生成 Cookie:

  1. 序列化身份信息
    用户身份(如 PrincipalCollection)被序列化为字节数组。

  2. AES 加密
    使用硬编码密钥 kPH+bIxk5D2deZiIxcaaaA== 对序列化数据进行 AES-CBC 加密。

  3. Base64 编码
    加密结果经 Base64 编码后存入 rememberMe Cookie。

关键代码AbstractRememberMeManager 类):

java 复制代码
protected byte[] convertPrincipalsToBytes(PrincipalCollection principals) {
    byte[] bytes = serialize(principals); // 序列化
    if (getCipherService() != null) {
        bytes = encrypt(bytes); // AES 加密
    }
    return bytes;
}

2. 漏洞触发点

服务端在接收到 rememberMe Cookie 时,会进行以下操作:

  1. Base64 解码

  2. AES 解密
    使用固定密钥解密数据。

  3. 反序列化
    解密后的字节流直接反序列化为对象,未做安全校验。

反序列化入口(DefaultSecurityManager 类):

java 复制代码
public PrincipalCollection getRememberedPrincipals(SubjectContext subjectContext) {
    byte[] bytes = getRememberedSerializedIdentity(subjectContext); // 提取 Cookie
    if (bytes != null) {
        return convertBytesToPrincipals(bytes, subjectContext); // 解密并反序列化
    }
    return null;
}

3. 漏洞成因

  • 固定加密密钥:硬编码密钥使攻击者可预测加密结果。

  • 无反序列化过滤 :解密后的数据直接调用 ObjectInputStream,未限制可反序列化的类。

四:漏洞复现

1.浏览器访问 http://192.168.1.100:8080/doLogin

2.用bp抓取登录包(勾选remember me)

发现请求包中是否有rememberme字段,响应包中有Set-cookie:rememberMe=deleteMe字段。

3.启动 工具ShiroAttack2。(使用jdk8)

4.检测是否存在漏洞,爆破密钥 ,爆破利用链及回显

5.注入内存马(本文使用蚁剑)

6.蚁剑连接

总结

CVE-2016-4437 暴露了 Shiro 在安全设计上的严重缺陷,通过硬编码密钥和缺乏反序列化过滤,攻击者可轻易实现 RCE。开发人员需及时更新组件并遵循安全实践,避免类似漏洞。

相关推荐
最初的↘那颗心几秒前
Java泛型深度解析:从基础语法到高级应用
java·面向对象·泛型
仙俊红3 分钟前
Spring Boot `@Configuration` 与 `@Component` 笔记
java·spring boot·笔记
计算机学姐3 小时前
基于SpringBoot的社团管理系统【2026最新】
java·vue.js·spring boot·后端·mysql·spring·mybatis
天上掉下来个程小白3 小时前
微服务-25.网关登录校验-网关传递用户到微服务
java·数据库·微服务
vivi_and_qiao4 小时前
HTML的form表单
java·前端·html
Slaughter信仰5 小时前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第四章知识点问答补充及重新排版
java·开发语言·jvm
心灵宝贝5 小时前
Mac用户安装JDK 22完整流程(Intel版dmg文件安装指南附安装包下载)
java·开发语言·macos
ta是个码农5 小时前
Mysql——日志
java·数据库·mysql·日志
今***b5 小时前
Python 操作 PPT 文件:从新手到高手的实战指南
java·python·powerpoint
David爱编程5 小时前
volatile 关键字详解:轻量级同步工具的边界与误区
java·后端