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

相关推荐
vortex53 小时前
Apache 配置文件提权的实战思考
apache
程序员张33 小时前
Maven编译和打包插件
java·spring boot·maven
ybq195133454314 小时前
Redis-主从复制-分布式系统
java·数据库·redis
码农12138号4 小时前
BUUCTF在线评测-练习场-WebCTF习题[GXYCTF2019]BabyUpload1-flag获取、解析
web安全·网络安全·文件上传漏洞·buuctf·解析漏洞
Johny_Zhao4 小时前
Docker + CentOS 部署 Zookeeper 集群 + Kubernetes Operator 自动化运维方案
linux·网络安全·docker·信息安全·zookeeper·kubernetes·云计算·系统运维
weixin_472339464 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
小毛驴8505 小时前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
DKPT5 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好奇的菜鸟7 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
DuelCode8 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis