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。开发人员需及时更新组件并遵循安全实践,避免类似漏洞。

相关推荐
雨中飘荡的记忆4 分钟前
Canal深度解析:MySQL增量数据订阅与消费实战
java
hhzz6 分钟前
Activiti7工作流(五)流程操作
java·activiti·工作流引擎·工作流
汤愈韬6 分钟前
防火墙用户管理技术
网络协议·网络安全·huawei
慧都小项8 分钟前
JAVA自动化测试平台Parasoft Jtest 插件Eclipse/IDEA安装教程
java·软件测试·测试工具·eclipse·intellij-idea
running up26 分钟前
Spring核心深度解析:AOP与事务管理(TX)全指南
java·数据库·spring
一水鉴天31 分钟前
整体设计 定稿 之6 完整设计文档讨论及定稿 之1(豆包周助手)
java·前端·数据库
五阿哥永琪34 分钟前
Spring Boot 权限控制三件套:JWT 登录校验 + 拦截器 + AOP 角色注解实战
java·spring boot·python
光算科技38 分钟前
商品颜色/尺码选项太多|谷歌爬虫不收录怎么办
java·javascript·爬虫
派大鑫wink41 分钟前
分享一些在Spring Boot中进行参数配置的最佳实践
java·spring boot·后端
想学习java初学者42 分钟前
SpringBoot整合MQTT多租户(优化版)
java·spring boot·后端