Shiro反序列问题修复

文章讲述了ApacheShiro安全框架存在的反序列化漏洞,特别是关于默认AES秘钥的问题。攻击者可能利用工具Shiro-attack进行暴力破解。为解决这个问题,文中建议修改默认秘钥并升级Shiro到最新版本以增强安全性。通过使用新秘钥并验证无法再被暴力破解,确认了问题的修复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#引言

Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。

问题描述

公司的安全部门利用shiro破解工具:shiro-attack,可以暴力破解出系统shiro的AES秘钥
image.png

问题分析

本系统采用Shiro验权框架,而在使用Shiro时,如果使用方式不当会造成反序列化的漏洞

Shiro反序列化漏洞

加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认秘钥伪造用户Cookie,进而在目标机器上执行任意命令

漏洞原理

Apache Shiro默认使用了CookieRemenerMeManager,其处理Cookie的流程:

  1. 得到rememberMe的Cookie值
  2. Base64解码
  3. AES解密
  4. 反序列化

然后AES的秘钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列的RCE漏洞。

AES加密秘钥在Shiro 1.2.4之前使用的硬编码:kPH+bIxk5D2deZiIxcaaaA==
如果采用此版本,建议先升级Shiro版本

寻找秘钥方式

我们如何获知选择的密钥是否与目标匹配呢?有一种思路是:当密钥不正确或类型转换异常时,目标Response包含Set-Cookie:rememberMe=deleteMe字段,而当密钥正确且没有类型转换异常时,返回包不存在Set-Cookie:rememberMe=deleteMe字段。
那么具体的检测方法一般包括如下几种:

漏洞关键元素

如果采用更新的版本,比如说本次项目中所有的1.5.4版本,则是使用了其他默认秘钥的问题。
在本次漏洞中,被暴力破解的秘钥是:4AvVhmFLUs0KTA3Kprsdag==
定位到代码行:
image.png
而此秘钥是Shiro比较常用的秘钥,可以参考文档:
https://blog.csdn.net/weixin_46137328/article/details/114986341

此方法往上继续查找
image.png
项目采用的是Spirng-Shiro框架,而securityManager方法就是将securityManager这个Bean注入到Spring容器中

问题修复

修改问题的思路其实也很简单,只要将此默认秘钥修改掉即可
此外,还升级了shiro到最新版本1.11.0,避免了其他一些低版本的安全问题

问题验证

下载shiro-attack

下载shiro-attack,安装jdk8运行环境
打开命令行,执行

java -jar shiro_attack-2.2.jar

运行后页面如下:
image.png

执行爆炸秘钥

将所要测试地址填入目标地址中,勾选AES GCM,点击“爆破秘钥”
image.png
无法再暴力破解出秘钥了,至此问题修复完成

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值