漏洞介绍
Apache Shiro 存在高危代码执行漏洞。该漏洞是由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
影响版本
Apache Shiro 1.2.5, 1.2.6, 1.3.0, 1.3.1, 1.3.2, 1.4.0-RC2, 1.4.0, 1.4.1版本。
环境搭建
shiro 环境下载地址 https://github.com/jas502n/SHIRO-721
exp 下载地址 https://github.com/Geekby/shiro_rce_exp
复现环境:ubuntu16.04 + tomcat8 + shiro 1.4.1
将下载好的 samples-web-1.4.1.war 包部署到 tomcat 上。

漏洞复现
1.访问shiro登录页面,并登陆


2.访问任意业务,抓包,得到Cookie中的rememberMe

3.生成java payload
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections1 'touch /tmp/test' > payload.class

4.执行exp,经过了一个多小时的爆破,得到padding oracle attack后的cookie


5.复制该cookie,然后重放一下数据库,即可成功执行命令

6.检查一下执行结果,可以看到成功创建了一个test文件

防范建议
目前官方尚未发布漏洞修复补丁
临时防范建议:
在安全设备尝试拦截爆破流量,及时阻止攻击者进行尝试性攻击。

韩国 1F
这漏洞真是够狠的,怕了。
菲律宾 B1
@ 逆袭的土豆 这漏洞真敢写,我都不敢在生产用Shiro了
日本 2F
记得及时换掉rememberMe,安全感提升。
北京市 B1
@ 茶烟 换了rememberMe也得看加密方式吧,不然换汤不换药。
江西省景德镇市 3F
其实除了cookie,Shiro的session序列化也有类似风险,建议一起审查。
福建省莆田市 4F
这payload能跑在Docker容器里吗?
日本 5F
我之前也玩过ysoserial,卡了好久才搞定。
澳大利亚 B1
@ 獬豸断 卡到怀疑人生+1,后来直接放弃了
山东省青岛市四方区 6F
这爆破真是耗时,感觉像在刷副本。
北京市 7F
看图里红框,那个漏洞直接炸了服务器。
北京市 8F
网友说已经有人用这个挂了几台机器,真是太吓人。
北京市 B1
@ 夜尘 挂机器是小事,数据丢了才真要命
湖南省 9F
记得加盐后再加密,安全感提升。
广东省珠海市 10F
如果把rememberMe改成JWT会不会更安全?🤔想知道实际实现难度。
澳大利亚 11F
太贵了吧这也,爆破一小时谁顶得住😂
广东省东莞市 12F
红框标得这么明显,一看就不简单。
北京市 13F
rememberMe换成JWT试试?求大佬指条明路
香港 B1
@ 白茶 JWT能防这问题?求个具体配置参考。
北京市 14F
ysoserial这玩意我当初跑了一整天都没成功,心态崩了
江苏省淮安市 15F
Docker里跑payload会不会被cgroup限制住啊?
湖南省郴州市 16F
那个啥,临时拦截流量治标不治本吧
辽宁省大连市 17F
之前搞过这个,爆破过程卡到怀疑人生
湖北省武汉市 18F
感觉还行,至少现在知道该查哪了
马来西亚 B1
@ 翡翠之怒 知道查哪也算是个进步了
韩国 19F
挂几台机器算啥,关键是后续横向移动更吓人
重庆市 20F
红框标得这么明显,一看就来者不善。
浙江省 21F
ysoserial跑失败好几次,真不是我手残…😭
陕西省西安市 22F
爆破一小时?我这边跑了三天都没出结果,服了。
福建省漳州市 23F
Docker里cgroup会不会直接把payload掐死啊?
江苏省无锡市 24F
这漏洞太要命了,连着三个系统都被打穿了。
印度尼西亚 25F
感觉临时拦截没啥用,攻击都进来了才拦?
广东省广州市 26F
之前复现过一次,光等爆破结果等到关机。
湖南省长沙市 27F
那个payload扔进去真能执行?有点不敢试…
陕西省西安市 28F
payload跑出来之后呢?还得自己手动部署?
日本 29F
哦豁,红框标记的那个CVE编号看着就头大
浙江省台州市 30F
这爆破一小时电费都够吃顿饭了
日本 31F
拦截流量?攻击都打完了才拦有啥用啊
菲律宾 32F
搞不懂为啥用AES-CBC,这模式不是早就有问题了
韩国 33F
之前部署过1.4.1,看来得赶紧检查了
四川省资阳市安岳县 34F
爆破这么久,服务器资源不会被吃光吗
韩国 35F
所以到底该怎么修?等官方补丁?
上海市 36F
临时建议等于没说,跟“多喝热水”一个性质
印度 37F
那个exp的github链接好像挂了,有人有备份吗?
福建省厦门市 38F
啥时候出补丁啊,等得心焦
辽宁省葫芦岛市 39F
payload那段能再解释下不?
美国 B1
@ TheGatsby payload就是生成用来触发漏洞的恶意代码,文里给的命令能生成一个执行touch指令的payload。
北京市 40F
爆破一小时?电费都够买杯奶茶了
河北省衡水市 41F
红框里的CVE编号看着就眼熟,去年好像也爆过类似的
日本 42F
这个复现步骤看着挺详细,周末有空试试
上海市 43F
之前做渗透测试的时候遇到过,确实挺麻烦的
北京市 44F
临时建议太水了,跟没说一样
越南 45F
Docker环境里会不会有别的坑啊,比如权限问题?
广东省深圳市宝安区 46F
所以最终修复还是得等官方是吧,心累
江苏省泰州市 47F
ysoserial跑起来是真慢,有没有什么优化技巧?
上海市 48F
图片里那个高亮的条目,是不是意味着已经可以攻击了?
美国 49F
ubuntu16.04+tomcat8这组合现在还有人用啊?
北京市 50F
爆破一小时?我这边十分钟就触发告警了。
北京市 51F
所以影响版本只到1.4.1?后面的版本稳了?
上海市 52F
之前测试环境搭了一下午,最后发现war包没放对地方,气死。
上海市 53F
临时建议就这?跟没说有啥区别。
江苏省 54F
那个exp链接里的py脚本好像要改几个参数才能用。
日本 55F
看到红框就头疼,又要加班了。
陕西省宝鸡市 56F
payload.class生成完,路径不对也是白搭。
江苏省常州市 57F
有没有一键检测脚本啊,手动搞太麻烦了。
浙江省 58F
这漏洞去年就爆出来了,现在复现还有啥意义?
重庆市 59F
我去,这漏洞真能直接打穿服务器?
台湾省高雄市 60F
之前搞过Shiro反序列化,爆破那块简直折磨人,卡到想砸电脑。
北京市 61F
Docker里cgroup会不会直接把命令执行掐死?求试过的老哥回个话
日本 62F
红框标成那样,一看就是高危中的高危,头皮发麻。
马来西亚 63F
这得赶紧通知运维看看
湖南省长沙市 64F
记得把rememberMe密钥换掉,不然等于大门敞开。
北京市 65F
这exp链接失效了谁有备份?急用,在线等😂
新加坡 66F
爆破一小时?我这跑了两天都没出结果,怀疑是不是环境有问题…
上海市 67F
ysoserial跑payload太吃资源了,有没有轻量点的替代方案?