MinIO SSRF漏洞 CVE-2021-21287

漏洞描述

随着工作和生活中的一些环境逐渐往云端迁移,对象存储的需求也逐渐多了起来,MinIO就是一款支持部署在私有云的开源对象存储系统。MinIO完全兼容AWS S3的协议,也支持作为S3的网关,所以在全球被广泛使用,在Github上已有25k星星。MinIO中存在SSRF漏洞,通过漏洞可以获取敏感信息或远程命令执行

漏洞影响

MinIO

漏洞复现

既然我们选择了从MinIO入手,那么先了解一下MinIO。其实我前面也说了,因为平时用到MinIO的时候很多,所以这一步可以省略了。其使用Go开发,提供HTTP接口,而且还提供了一个前端页面,名为“MinIO Browser”。当然,前端页面就是一个登陆接口,不知道口令无法登录。

那么从入口点(前端接口)开始对其进行代码审计吧。

在User-Agent满足正则.*Mozilla.*的情况下,我们即可访问MinIO的前端接口,前端接口是一个自己实现的JsonRPC:

1

1

我们感兴趣的就是其鉴权的方法,随便找到一个RPC方法,可见其开头调用了webRequestAuthenticate,跟进看一下,发现这里用的是jwt鉴权:

2

2

jwt常见的攻击方法主要有下面这几种:

查看MinIO的JWT模块,发现其中对alg进行了校验,只允许以下三种签名方法:

3

3

这就堵死了前两种绕过方法,爆破当然就更别说了,通常仅作为没办法的情况下的手段。当然,MinIO中使用用户的密码作为签名的密钥,这个其实会让爆破变地简单一些。

鉴权这块没啥突破,我们就可以看看,有哪些RPC接口没有进行权限验证。