Shiro框架漏洞

一.核心基础

  • 漏洞名称:Shiro RememberMe 反序列化远程代码执行漏洞

  • 核心CVE:CVE-2016-4437(最核心、最经典),后续衍生出多个绕过漏洞(无新CVE,多为配置/组件绕过)

  • CVSS评分:高危(9.8分)

  • 漏洞类型:远程代码执行(RCE)

  • 框架定位:Apache Shiro是Java生态常用的安全框架,用于身份认证、授权、会话管理、加密等,广泛应用于Java Web项目。

二. 漏洞原理

Shiro框架的「RememberMe」功能(记住密码)存在设计缺陷,核心问题在于加密密钥硬编码+反序列化未做安全校验

  1. 用户勾选「记住我」登录成功后,服务端会将用户信息序列化,用硬编码的AES密钥加密,再经过Base64编码,生成RememberMe Cookie值并返回给客户端;

  2. 客户端下次请求时,会携带该RememberMe Cookie,服务端接收后,先Base64解码,再用硬编码密钥解密,最后对解密后的内容执行反序列化操作,恢复用户信息;

  3. 攻击者利用「硬编码密钥已知」的漏洞,构造恶意序列化对象(包含恶意代码),用已知密钥加密、Base64编码,伪造RememberMe Cookie;

  4. 服务端接收伪造的Cookie后,会自动解密并反序列化,触发恶意代码执行,最终实现远程控制服务器(RCE)。

核心关键点:Shiro框架默认使用硬编码的AES密钥(如kPH+bIxk5D2deZiIxcaaaA==),全网通用,攻击者可直接获取密钥用于伪造恶意Cookie。

三. 影响范围

  • 受影响版本:Apache Shiro ≤ 1.2.4(核心受影响版本,CVE-2016-4437);

  • 后续绕过场景:Shiro 1.2.5+版本修复了硬编码密钥问题,但部分项目未修改默认密钥、或使用弱密钥,仍可能被绕过;部分第三方组件集成Shiro时,仍沿用硬编码密钥,也会存在漏洞;

  • 不受影响场景:Shiro 1.2.5+版本,且管理员已修改默认AES密钥、使用强密钥,且限制反序列化类白名单。

四. 典型Payload及密钥

(1)默认硬编码密钥

kPH+bIxk5D2deZiIxcaaaA== # Shiro ≤1.2.4 默认AES密钥(Base64编码后) 2AvVhdsgUs0FSA3SDFAdag== # 部分第三方集成版本默认密钥 UW5JUFRUUE5EVElPTlNBTkFNRQ== # 另一常见默认密钥

(2)Payload构造逻辑

Shiro漏洞Payload无需手动编写,需借助工具生成,核心格式:

恶意序列化对象 → AES加密(使用已知密钥) → Base64编码 → 伪造RememberMe Cookie值

示例伪造Cookie(简化版,实际需工具生成):

rememberMe=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...(后续为加密后的恶意序列化内容)

五. 修复与防御方案

(1)根本修复:升级版本+修改默认密钥

  • 升级Shiro版本:将Apache Shiro升级至 ≥ 1.2.5(修复硬编码密钥问题),推荐升级至最新稳定版(如1.12.0);

  • 修改默认密钥:升级后,必须手动配置自定义的强AES密钥(16位/24位/32位,对应AES-128/AES-192/AES-256),禁止使用默认密钥,配置示例(Spring Boot项目):

# application.properties 配置自定义AES密钥(Base64编码后的16位密钥) shiro.rememberMe.cookie.secure=true shiro.rememberMe.manager.cipherKey=emhhbmdzYW4xMjM0NTY3OA== # 自定义密钥,Base64编码

(2)临时缓解:无法升级时使用

  • 禁用RememberMe功能:若业务无需“记住密码”,直接关闭该功能(最直接有效);

  • 限制反序列化类白名单:配置Shiro的反序列化过滤器,只允许指定的安全类被反序列化,禁止危险类(如CommonsCollections相关类);

  • 替换反序列化组件:将Shiro默认的反序列化组件(如Java原生反序列化)替换为安全的反序列化组件(如Jackson),避免原生反序列化漏洞。

(3)全面防御:多维度加固

  • 代码层面:避免使用CommonsCollections3.x/4.x等存在反序列化漏洞的依赖包(Shiro反序列化漏洞常依赖该包利用);

  • 防护层面:WAF拦截伪造的RememberMe Cookie(如拦截超长、包含恶意特征的Cookie值),拦截反序列化相关的恶意Payload;

  • 运维层面:定期扫描项目依赖包,排查Shiro版本及默认密钥使用情况;定期检查项目配置,确保未沿用默认密钥。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值