shrio反序列漏洞修复_shiro反序列化漏洞解决⽅案总结
最近给做了⼀个项⽬,昨天被检测出shiro反序列化漏洞,⼀脸懵逼,连夜加班抢修,好在已经有很多前辈已经碰到过这个问题,给出了解决⽅案,这⾥我在记录⼀下,作为这次事故的总结,也可以为后来的⼈提供快捷的解决思路。
⽹上⽐较多的说到shiro 1.2.4之前的版本就存在反序列漏洞,上⾯贴出前两篇⽂章都详细的给出了导致漏洞的原因以及复现的过程,我这⾥就不在赘述,总结下来就是shiro的“记住我”的功能⽤到了AES加密,但是密钥是硬编码在代码⾥的,所以很容易拿到密钥,因为 AES 是对称加密,即加密密钥也同样是解密密钥,所以就可以通过恶意构建Cookie获取权限执⾏攻击命令,拿到root权限,官⽅解决的⽅案是简单的弃⽤了问题代码,链接:SHIRO-550: Disable remember-me functionality by default,所以建议是升级shiro版本,避免该问题,新版本到shiro 1.2.5及以上版本,就不存在硬编码密钥的问题,⽽改为⾃定义密钥,但是我看了⼀下我使⽤的shiro版本是1.4.0,按理不应该存在该问题了啊,那问题出在哪⾥呢,⽚头引⽤的第四篇⽂章⾥⾯说到了升级shiro版本后仍然存在反序列化漏洞,其原因是因为我们使⽤了别⼈的开源框架,他们在代码⾥会配置shiro的密钥,⽽关键代码可以在github上通过api search接⼝搜索到,从⽽得到⼀个所谓的key包,其实就是这些密钥的集合,然后⽤这些公开的密钥去轮流尝试,如果你⽤了开源的框架,⽽没有修改shiro的密钥,其实这就相当于你使⽤的shiro密钥已经泄露,这是⾮常危险的。
明⽩了问题所在,解决就很简单了:
1.确定⾃⼰使⽤的shiro版本要⾼于1.
2.4;
2.在代码中全局搜索 "setCipherKey(Base64.decode(" 关键字,或者"setCipherKey"⽅法,Base64.decode()中的字符串就是shiro的密钥,要确保该密钥的安全性,千万不要使⽤公开的密钥。
因为笔者使⽤了⼀个开源的库,密钥没有修改才导致了该问题,好在虚惊⼀场,没有造成什么损失,但是要记住这个教训,提⾼安全意识啊。shiro安全框架
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论