3.9K Star 18.4K Fork 5.3K

卓源软件 / JeeSite 4.x and 5.x

 / 详情

Apache Shiro AES Key 可枚举漏洞

已完成
创建于  
2021-06-07 21:36

该问题是怎么引起的?

谢谢回复我的解决方案,但是我的jeesite版本是4.0.5的,yml文件里并没有shiro.rememberMe.secretKey这个配置,请问该如何解决呢?而且我的目的不是为了记住密码设置秘钥,而是目前是安全测试中,他每次可以读取到我系统里的秘钥,不知道代码里哪里设置了秘钥,我也没做过任何设置,下面是安全测试发给我的报告单

发现 key 的值为
r0e3c16IdVkouZgk1TKVMg==
发现 mode 的值为
cbc
发现 origin_count 的值为
1
发现 cookie_name 的值为
rememberMe
发现 current_count 的值为
0
解决方案也告知我了,如下
升级 shiro 到 1.2.5 及以上版本。
如果在配置里配置了密钥,那么请一定不要使用网上的密钥,通过自己 base64 一个 AES 的密钥,或者利用官方提供的方法生成密钥:
org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey()
上面是测试报告给的解决方案,下面是您给我的解决方案

谢谢回复我的解决方案,回复解决方案如下
/**
 * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
 */
package com.jeesite.test;

import org.apache.shiro.crypto.AesCipherService;

/**
 * v4.1.8 开始将不为记住我功能,设置默认密钥,即启动系统时生成新密钥。
 * 这样会造成一个问题,比如:重启服务后,记住登录的用户因为解密失败,而需要重新登录。
 * 为了解决这个问题,您可以通过这个类获取一个新密钥,设置到 shiro.rememberMe.secretKey 中即可。
 * 另外,如果你从配置文件里将 shiro.rememberMe.secretKey 设置为空,启动系统时也会自动设置一个新的密钥。
 * @author ThinkGem
 * @version 2019年11月6日
 */
public class RememberMeKeyGen {

	public static void main(String[] args) {
		byte[] cipherKey = new AesCipherService().generateNewKey().getEncoded();
		String secretKey = org.apache.shiro.codec.Base64.encodeToString(cipherKey);
		System.out.println("shiro.rememberMe.secretKey = " + secretKey);
	}
	
}
但是我的jeesite版本是4.0.5的,yml文件里并没有shiro.rememberMe.secretKey这个配置,请问该如何解决呢?
我的secretKey只在单点登录相关有这个设置,如下:
sso:
#
#    # 如果启用/sso/{username}/{token}单点登录,请修改此安全key并与单点登录系统key一致。
#    secretKey: ~
#
#    # 是否加密单点登录安全Key
#    encryptKey: true
#
#  # 登录提交信息加密
loginSubmit:
  #
  #    # 登录提交信息安全Key,加密用户名、密码、验证码,后再提交(key设置为3个,用逗号分隔)
  #    secretKey: thinkgem,jeesite,com
  #
  #  # 允许的请求方法设定,解决安全审计问题
  #  allowRequestMethods: GET,POST
  #
  #  # 是否允许账号多地登录,如果设置为false,同一个设备类型的其它地点登录的相同账号被踢下线
  isAllowMultiAddrLogin: false
是否可以直接在shiro配置文件里新增rememberMe.secretKey配置呢?目前只有如下几个配置
# Shiro 相关配置
shiro:
  #
  #  #索引页路径
  defaultPath: ${frontPath}/web/index
#
#  # 登录相关设置
#  loginUrl: ${adminPath}/login
#  logoutUrl: ${shiro.loginUrl}
#  successUrl: ${adminPath}/index
#
##  # Jasig CAS 相关配置
##  casServerUrl: http://127.0.0.1:8981/cas
##  casClientUrl: http://127.0.0.1:8980/js
##  loginUrl: ${shiro.casServerUrl}?service=${shiro.casClientUrl}${adminPath}/login-cas
##  logoutUrl: ${shiro.casServerUrl}/logout?service=${shiro.loginUrl}
##  successUrl: ${shiro.casClientUrl}${adminPath}/index
#
#  # 简单 SSO 登录相关配置

评论 (2)

戴勇 创建了任务
戴勇 关联仓库设置为卓源软件/JeeSite 4.2
戴勇 修改了描述
戴勇 修改了描述
戴勇 修改了描述
展开全部操作日志

shiro.rememberMe.secretKey 这参数适应于 v4 所有版本,yml没有的话,加进去就行;你也可以关闭这个功能,在 ShiroConfig 里找到 securityManager,加一行代码 bean.setRememberMeManager(null);

好的,谢谢

卓源软件 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
6732 thinkgem 1651893329
Java
1
https://gitee.com/thinkgem/jeesite4.git
git@gitee.com:thinkgem/jeesite4.git
thinkgem
jeesite4
JeeSite 4.x and 5.x

搜索帮助