Minio从信息泄露到RCE漏洞分析(CVE-2023-28432)
字数 1326 2025-08-24 16:48:06

Minio从信息泄露到RCE漏洞分析(CVE-2023-28432)教学文档

漏洞概述

Minio是一个基于Go语言的对象存储服务,实现了大部分亚马逊S3云存储服务接口。该漏洞涉及两个关键问题:

  1. 敏感信息泄露漏洞:通过特殊URL可读取系统敏感信息
  2. 远程代码执行(RCE)漏洞:利用泄露的凭证可执行任意代码

受影响版本

版本号小于RELEASE.2023-03-20T20-16-18Z的Minio实例

漏洞检测

版本检测

发送HTTP请求检测版本:

GET /api/v1/check-version HTTP/1.1

如果响应中版本号小于RELEASE.2023-03-20T20-16-18Z则存在漏洞

信息泄露检测

发送POST请求验证信息泄露:

POST /minio/bootstrap/v1/verify HTTP/1.1

漏洞利用流程

  1. 获取敏感信息:通过信息泄露接口获取环境变量和配置
  2. 提取凭证:从泄露信息中获取管理员凭证
  3. 设置恶意升级URL:使用Minio客户端配置恶意更新源
  4. 触发更新:强制Minio从恶意源更新并执行代码

具体步骤:

# 1. 设置Minio别名(使用泄露的凭证)
mc alias set myminio http://ip:9000 user_R3s3arcm pwd_R3s3arcm

# 2. 触发恶意更新
mc admin update myminio -y

漏洞分析

信息泄露部分

  1. 路由注册:在cmd/routers.go中注册了bootstrap相关路由
router := mux.NewRouter().SkipClean(true).UseEncodedPath()
  1. bootstrap路径定义cmd/bootstrap-peer-server.go中定义了相关路径
const (
    bootstrapRESTVersion = "v1"
    bootstrapRESTVersionPrefix = SlashSeparator + bootstrapRESTVersion
    bootstrapRESTPrefix = minioReservedBucketPath + "/bootstrap"
    bootstrapRESTPath = bootstrapRESTPrefix + bootstrapRESTVersionPrefix
)
  1. VerifyHandler处理函数:泄露服务器配置
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))
}
  1. getServerSystemCfg函数:获取环境变量信息
func getServerSystemCfg() ServerSystemConfig {
    envs := env.List("MINIO_")
    envValues := make(map[string]string, len(envs))
    for _, envK := range envs {
        if _, ok := skipEnvs[envK]; ok {
            continue
        }
        envValues[envK] = env.Get(envK, "")
    }
    return ServerSystemConfig{
        MinioEndpoints: globalEndpoints,
        MinioEnv: envValues,
    }
}
  1. 跳过的环境变量:部分敏感变量被跳过
var skipEnvs = map[string]struct{}{
    "MINIO_OPTS": {},
    "MINIO_CERT_PASSWD": {},
    "MINIO_SERVER_DEBUG": {},
    "MINIO_DSYNC_TRACE": {},
}

RCE部分

  1. 更新验证失效envMinisignPubKey为空导致sha256sum校验失效
minisignPubkey := env.Get(envMinisignPubKey, "")
if minisignPubkey != "" {
    // 验证逻辑
}
  1. 更新处理入口cmd/admin-handlers.go中的更新处理
// ServerUpdateHandler - POST /minio/admin/v3/update?updateURL={updateURL}
for _, nerr := range globalNotificationSys.VerifyBinary(ctx, u, sha256Sum, releaseInfo, reader) {
    // 错误处理
}
err = verifyBinary(u, sha256Sum, releaseInfo, mode, reader)

修复建议

  1. 升级到RELEASE.2023-03-20T20-16-18Z或更高版本
  2. 修改默认管理员凭证
  3. 限制/minio/bootstrap/v1/verify接口的访问

参考链接

  1. Minio GitHub仓库: https://github.com/minio/minio
  2. 漏洞相关代码:
    • main.go: https://github.com/minio/minio/blob/RELEASE.2023-03-13T19-46-17Z/main.go
    • routers.go: https://github.com/minio/minio/blob/RELEASE.2023-03-13T19-46-17Z/cmd/routers.go
    • bootstrap-peer-server.go: https://github.com/minio/minio/blob/RELEASE.2023-03-13T19-46-17Z/cmd/bootstrap-peer-server.go
    • update.go: https://github.com/minio/minio/blob/RELEASE.2023-03-13T19-46-17Z/cmd/update.go
    • admin-handlers.go: https://github.com/minio/minio/blob/6017b63a0612daa0ab9ef87804a57b899766bb9c/cmd/admin-handlers.go
Minio从信息泄露到RCE漏洞分析(CVE-2023-28432)教学文档 漏洞概述 Minio是一个基于Go语言的对象存储服务,实现了大部分亚马逊S3云存储服务接口。该漏洞涉及两个关键问题: 敏感信息泄露漏洞:通过特殊URL可读取系统敏感信息 远程代码执行(RCE)漏洞:利用泄露的凭证可执行任意代码 受影响版本 版本号小于RELEASE.2023-03-20T20-16-18Z的Minio实例 漏洞检测 版本检测 发送HTTP请求检测版本: 如果响应中版本号小于RELEASE.2023-03-20T20-16-18Z则存在漏洞 信息泄露检测 发送POST请求验证信息泄露: 漏洞利用流程 获取敏感信息 :通过信息泄露接口获取环境变量和配置 提取凭证 :从泄露信息中获取管理员凭证 设置恶意升级URL :使用Minio客户端配置恶意更新源 触发更新 :强制Minio从恶意源更新并执行代码 具体步骤: 漏洞分析 信息泄露部分 路由注册 :在 cmd/routers.go 中注册了bootstrap相关路由 bootstrap路径定义 : cmd/bootstrap-peer-server.go 中定义了相关路径 VerifyHandler处理函数 :泄露服务器配置 getServerSystemCfg函数 :获取环境变量信息 跳过的环境变量 :部分敏感变量被跳过 RCE部分 更新验证失效 : envMinisignPubKey 为空导致sha256sum校验失效 更新处理入口 : cmd/admin-handlers.go 中的更新处理 修复建议 升级到RELEASE.2023-03-20T20-16-18Z或更高版本 修改默认管理员凭证 限制/minio/bootstrap/v1/verify接口的访问 参考链接 Minio GitHub仓库: https://github.com/minio/minio 漏洞相关代码: main.go: https://github.com/minio/minio/blob/RELEASE.2023-03-13T19-46-17Z/main.go routers.go: https://github.com/minio/minio/blob/RELEASE.2023-03-13T19-46-17Z/cmd/routers.go bootstrap-peer-server.go: https://github.com/minio/minio/blob/RELEASE.2023-03-13T19-46-17Z/cmd/bootstrap-peer-server.go update.go: https://github.com/minio/minio/blob/RELEASE.2023-03-13T19-46-17Z/cmd/update.go admin-handlers.go: https://github.com/minio/minio/blob/6017b63a0612daa0ab9ef87804a57b899766bb9c/cmd/admin-handlers.go