shiro反序列化漏洞危害
2016年,序列Apache Shiro 1.2.4版本被曝出一个反序列化漏洞,化漏害编号CVE-2016-4437。洞危这个漏洞的序列触发条件低得离谱——只要目标应用使用了Shiro的"记住我"功能,攻击者就能在无需登录的化漏害情况下直接执行任意代码。当年不少企业内网被撕开口子,洞危就是序列从这一个Cookie开始的。 Shiro处理"记住我"的化漏害流程有个致命缺陷。用户勾选"Remember Me"后,洞危服务端会把身份信息序列化、序列AES加密,化漏害再Base64编码塞进Cookie。洞危下次请求带上这个Cookie,序列Shiro自动解密、化漏害反序列化,洞危还原用户身份。问题出在AES密钥上——Shiro 1.2.4及之前版本,硬编码了一个默认密钥 拿到默认密钥意味着什么?攻击者可以自己构造恶意序列化数据,用这个密钥加密,伪造Cookie发给服务器。服务器解密后直接反序列化,如果classpath里存在可利用的gadget链(比如CommonsCollections、CommonsBeanutils),命令执行就是水到渠成的事。 这个漏洞真正的杀伤力不在技术层面,而在于它的隐蔽性和覆盖面。Shiro是Java生态里最流行的权限框架之一,大量Spring Boot项目默认集成。很多开发团队根本不知道"记住我"功能背后有序列化操作,更不知道密钥需要修改。安全扫描器批量扫全网,匹配的是Cookie里 实际攻击场景比想象中粗暴。攻击者不需要任何账号,一个HTTP请求就够。构造payload、加密、发包,服务器返回500说明gadget链不通,换个链继续试。CommonsCollections系列、Groovy、Spring等利用链轮番上阵,总有一条能打通。打通之后,反弹Shell、植入内存马、横向移动,整套流程在几分钟内完成。 更麻烦的是,Shiro反序列化往往和其他漏洞形成组合拳。比如先通过Shiro打下一台边缘服务器,再以此为跳板攻击内网。很多企业的边界防护做得不错,但Shiro漏洞直接绕过了认证层,等于从正门大摇大摆走进去。 修复这件事本身不复杂。升级Shiro到1.2.5以上版本、替换默认AES密钥、或者干脆禁用"记住我"功能,三选一就能堵住。但现实是,大量老旧系统跑在1.2.4甚至更早版本上,没人敢动——牵一发动全身。安全团队提交漏洞报告,开发团队回一句"业务不支持升级",然后就没有然后了。 我见过一个案例:某公司内网OA系统用的是Shiro 1.2.4,安全部门扫出来之后发了工单,开发说排期到三个月后。结果第二周就被入侵了,攻击者通过Shiro漏洞上传了Webshell,在内网潜伏了将近一个月才被发现。事后复盘,根因就一行代码——默认密钥没改。 这个漏洞揭示了一个尴尬的现实:Java生态里大量框架的默认配置是"能用就行",安全属性被放在最后考虑。Shiro不是第一个,也不会是最后一个。开发者习惯性地信任框架的默认行为,攻击者则习惯性地利用这种信任。 如果你现在还在维护Java应用,去检查一下Shiro版本和AES密钥配置。别等出事再补。kPH+bIxk5D2deZiIxcaaaA==。开发者不主动改,它就一直在那儿。rememberMe字段的特征——一抓一个准。
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-