一、漏洞介绍
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。Shiro提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问。
Shiro对rememberme的cookie做了加密处理,shiro在CookieRememberMeManaer类中将cookie中rememberme字段内容分别进行 序列化、AES加密、Base64编码操作。在识别身份的时候,需要对Cookie里的rememberme字段解密。根据加密的顺序,不难知道解密的顺序为:获取rememberMe-cookiebase64-decod-解密AES反序列化。但是,AES加密的密钥Key被硬编码在代码里,意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者构造一个恶意的对象,并且对其序列化,AES加密,base64编码后,作为cookie的rememberme字段发送。Shiro将remembere进行解密并且反序列化,最终造成反序列化漏洞。
二、漏洞复现
1、使用vulhub搭建环境
2、访问漏洞环境页面(ip:8080)
3、 漏洞探测和利用过程,在漏洞环境页面输入账户密码,选择rememberme,点击登录,返回包里存在rememberMe=deleteMe,说明大概率使用了shiro的框架。
进一步使用poc探测,拿到了key,说明存在漏洞的概率很大了
使用poc执行命令成功(大佬的exp地址:https://github.com/Ares-X/shiro-exploit)
三、修复方法
官方的漏洞处理意见只是在逻辑上对该漏洞进行了处理。如果在配置里自己单独配置AES的密钥,并且密钥一旦泄露,那么漏洞依然存在。所以有大佬建议以下两点同时进行:
(1)升级shiro到1.2.5及以上
(2)如果在配置里配置了密钥,不要使用网上的密钥,自己base64一个AES的密钥,或者利用官方提供的方法生成密钥:
org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey
参考链接:https://www.cnblogs.com/loong-hon/p/10619616.html
来源:freebuf.com 2020-11-27 09:51:31 by: 龙渊实验室LongYuanLab
请登录后发表评论
注册