当前位置:   article > 正文

【Shiro】Apache Shiro 默认密钥致命令执行漏洞(CVE-2016-4437)的解决方案

【Shiro】Apache Shiro 默认密钥致命令执行漏洞(CVE-2016-4437)的解决方案

本文目录

一、项目描述

二、漏洞详情

三、解决方案

步骤1、新创建一个秘钥生成器

步骤2、引用新生成的密钥


今天收到运维人员的反馈,说程序有漏洞,如下图:

一、项目描述

项目技术栈:Spring Boot(2.0.1) + shiro(1.6.0) + mybatis(3.4.1)

二、漏洞详情

Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。

阿里云先知里有这个漏洞相关的详情,可点击漏洞详情查看。

以下是详情简要概括:Apache Shiro 是ASF旗下的一款开源软件,它提供了一个强大而灵活的安全框架,提供身份验证、授权、密码和会话管理。在Apache Shiro部分旧版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中,攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。

查看自己的代码,果然发现了这一处漏洞:

三、解决方案

修复建议:升级shiro至最新版本1.7.0并生成新的密钥替换,注意妥善保管密钥。
利用官方提供的方法生成密钥:org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey(int),替换key修复指南:如以下内容!

步骤1、新创建一个秘钥生成器

package com.iot.mainsite.component.shiro;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;

/**
 * <p>GenerateCipherKey 此类用于:</p>
 * <p>@author:hujm</p>
 * <p>@date:2021年12月07日 19:02</p>
 * <p>@remark:</p>
 */
@Slf4j
public class GenerateCipherKey {

    /**
     * 随机生成秘钥,参考org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey(int)
     *
     * @return 随机生成秘钥
     */
    @Bean
    public static byte[] generateNewKey() {

        KeyGenerator keyGenerator;

        try {
            keyGenerator = KeyGenerator.getInstance("AES");
        } catch (NoSuchAlgorithmException e) {
            String msg = "Unable to acquire AES algorithm. This is required to function.";
            throw new IllegalStateException(msg, e);
        }

        keyGenerator.init(128);
        SecretKey secretKey = keyGenerator.generateKey();
        byte[] encoded = secretKey.getEncoded();

        log.info("生成随机秘钥成功!");

        return encoded;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

步骤2、引用新生成的密钥

以上两步即可搞定。

完结!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/570372
推荐阅读
相关标签
  

闽ICP备14008679号