IT资讯 【重要通知】使用 OneBlog(DBlog)的用户,请注意!!!

cecil · 2021-04-09 18:00:06 · 热度: 42

【重要通知】使用 OneBlog(DBlog)的用户,请注意!!!

使用 OneBlog(DBlog)的用户,请注意!!!

各位正在使用 OneBlog[1](DBlog)的用户,请注意,本篇文章非常重要,请一定要认真读完!

OneBlog 中使用了 Shiro 权限管理框架,版本为:

<shiro.spring.version>1.4.0</shiro.spring.version>

该版本针对 CookieRememberMeManager 存在一个反序列化的漏洞:

•原文:https://issues.apache.org/jira/browse/SHIRO-550•相关模拟:https://blog.csdn.net/Dothwinds/article/details/105244830

OneBlog 是我18年的时候开发出的一款博客系统,当时我在开发 OneBlog 时其实已经考虑到了这一点(当时没有考虑太深),因此给项目重新生成了一个 Key,并且想当然的在源码中给出了注释,如下:

【重要通知】使用 OneBlog(DBlog)的用户,请注意!!!

但由于当时太天真,没有考虑到用户群体的复杂性,想当然的以为用户在用的时候一定会看源码(实际情况,除了专门研究源码的人,没有多少使用者会深究你的代码),因此也没有在文档中说明。

今日收到一位从事安全研究行业的朋友的提示,所以紧急修复一版:

【重要通知】使用 OneBlog(DBlog)的用户,请注意!!!

【重要通知】使用 OneBlog(DBlog)的用户,请注意!!!

在此给各位造成的不便,深表歉意。

升级方式:

• 如果本地代码未做过多修改,可以直接 git pull 拉取最新代码• 如果你已经做了不少定制开发,可以按照以下步骤操作:

在 blog-admin/src/main/java/com/zyd/blog/core/config/ShiroConfig.java 配置类中,增加以下内容:

/** * 解决 shiro 反序列化漏洞 * * https://blog.csdn.net/qq_34775355/article/details/106643678 */public static class GenerateCipherKey {
    /**     * 随机生成秘钥,参考org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey(int)     *     * @return byte[]     */    public static byte[] generateNewKey() {        KeyGenerator kg;        try {            kg = KeyGenerator.getInstance("AES");        } catch (NoSuchAlgorithmException var5) {            String msg = "Unable to acquire AES algorithm.  This is required to function.";            throw new IllegalStateException(msg, var5);        }
        kg.init(128);        SecretKey key = kg.generateKey();        return key.getEncoded();    }}

然后修改 rememberMeManager 方法:

/** * cookie管理对象;记住我功能 * * @return */public CookieRememberMeManager rememberMeManager() {    CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();    cookieRememberMeManager.setCookie(rememberMeCookie());    // 主要是这个地方,使用上面定制的 key 生成器生成随机 key    cookieRememberMeManager.setCipherKey(GenerateCipherKey.generateNewKey());    return cookieRememberMeManager;}

或者直接 copy ShiroConfig.java[2] 中的代码覆盖你本地的相关代码。

最后,最好将 shiro 升级到最新版本,项目根目录下的 pom.xml 文件中,升级 shiro 相关的依赖:

<shiro.spring.version>1.7.1</shiro.spring.version>

PS: 呼吁各位使用 shiro 框架的开发者或者开源项目作者,自行检阅自己的项目是否也存在这个问题,如果存在,请及时修复!

引用链接

[1] OneBlog: https://gitee.com/yadong.zhang/DBlog
[2] ShiroConfig.java: https://gitee.com/yadong.zhang/DBlog/blob/master/blog-admin/src/main/java/com/zyd/blog/core/config/ShiroConfig.java

猜你喜欢:
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册