【漏洞分析】利用Padding Oracle攻击造成的Shiro RCE漏洞

匿名者  1001天前

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。

近日,白帽汇安全研究院发现Apache官网发布了漏洞通告:RememberMe Padding Oracle Vulnerability,是借助Padding Oracle进行的反序列化攻击。

shiro0.png

概况

目前FOFA系统最新数据(一年内数据)显示全球范围内共有3516个使用shiro框架的网站对外开放。中国大陆地区使用数量最多,共有3041台,中国香港特别行政区第二,共有151台,美国第三,共有129台,西班牙第四,共有32台。

shiro_global.png

全球范围内使用shiro框架的网站分布情况(仅为分布情况,非漏洞影响情况)

中国大陆地区北京市使用用数量最多,共有656台;浙江省第二,共有286台,广东省第三,共有93台,上海市第四,共有83台,江苏省第五,共有65台。

shiro_china.png

中国大陆范围内使用shiro框架网站分布情况(仅为分布情况,非漏洞影响情况)

危害等级

严重

漏洞原理

回顾SHIRO-550漏洞

shiro在默认情况下使用CookieRememberMeManager对用户身份进行序列化、加密和编码,当用户登录时使用对称方式进行验证:

查看RememberMe cookie的值
base64解码
使用AES解密
使用Java序列化(objectInputStream)反序列化

漏洞产生:

AES的密钥是硬编码的,只要能访问源代码的就能知道默认加密密钥,导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

官方修复:

删除代码里的默认密钥
默认配置里注释了默认密钥
如果不配置密钥,每次会重新随机一个密钥

官方修复中没有对反序列化做安全限制。

SHIRO-721漏洞

RememberMe使用AES-128-CBC模式加密,容易受到Padding Oracle攻击,AES的初始化向量iv就是rememberMe的base64解码后的前16个字节,攻击者只要使用有效的RememberMe cookie作为Padding Oracle Attack 的前缀,然后就可以构造RememberMe进行反序列化攻击,攻击者无需知道RememberMe加密的密钥。

16.png

AES的初始化向量iv

复现方法

1.登录网站,获取cookie中的RememberMe

2.使用RememberMe cookie作为Padding Oracle Attack的前缀

3.加密ysoserial的序列化有效负载,结合Padding Oracle Attack制作精心制作的RememberMe

4.请求带有新的RememberMe cookie的网站,以执行反序列化攻击

漏洞影响

目前漏洞影响版本号包括:

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

参考

[1] https://www.cnblogs.com/loong-hon/p/10619616.html

[2] https://blog.csdn.net/three_feng/article/details/52189559

[3] https://issues.apache.org/jira/browse/SHIRO-721

[4] https://issues.apache.org/jira/browse/SHIRO-550

白帽汇从事信息安全,专注于安全大数据、企业威胁情报。

公司产品:FOFA-网络空间安全搜索引擎、FOEYE-网络空间检索系统、NOSEC-安全讯息平台。

为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务。

最新评论

昵称
邮箱
提交评论