CVE-2023-28432 Minio信息泄露导致RCE

admin 2023年6月29日23:38:06评论86 views字数 4806阅读16分1秒阅读模式

扫码领资料

获黑客教程

免费&进群

CVE-2023-28432 Minio信息泄露导致RCE
CVE-2023-28432 Minio信息泄露导致RCE



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

这通告把漏洞点都给出来了…

# 环境

看这篇文章《Docker下MinIO的使用》(https://note.dolyw.com/docker/07-MinIO.html#_2-%E5%90%AF%E5%8A%A8)

docker-compose.yml

version: '3.7'
# starts 4 docker containers running minio server instances. Each# minio server's web interface will be accessible on the host at port# 9001 through 9004.services: minio1: image: minio/minio:RELEASE.2020-01-16T22-40-29Z container_name: minio1 volumes: - data1-1:/data1 - data1-2:/data2 ports: - "9001:9000" environment: MINIO_ACCESS_KEY: minio MINIO_SECRET_KEY: minio123 command: server http://minio{1...4}/data{1...2} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3
minio2: image: minio/minio:RELEASE.2020-01-16T22-40-29Z container_name: minio2 volumes: - data2-1:/data1 - data2-2:/data2 ports: - "9002:9000" environment: MINIO_ACCESS_KEY: minio MINIO_SECRET_KEY: minio123 command: server http://minio{1...4}/data{1...2} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3
minio3: image: minio/minio:RELEASE.2020-01-16T22-40-29Z container_name: minio3 volumes: - data3-1:/data1 - data3-2:/data2 ports: - "9003:9000" environment: MINIO_ACCESS_KEY: minio MINIO_SECRET_KEY: minio123 command: server http://minio{1...4}/data{1...2} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3
minio4: image: minio/minio:RELEASE.2020-01-16T22-40-29Z container_name: minio4 volumes: - data4-1:/data1 - data4-2:/data2 ports: - "9004:9000" environment: MINIO_ACCESS_KEY: minio MINIO_SECRET_KEY: minio123 command: server http://minio{1...4}/data{1...2} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3
## By default this config uses default local driver,## For custom volumes replace with volume driver configuration.volumes: data1-1: data1-2: data2-1: data2-2: data3-1: data3-2: data4-1: data4-2:
docker-compose pulldocker-compose up

http://172.16.16.128:9001/ 到9004端口都是minio集群

# 漏洞分析

根据官方GitHub中的通告

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

 可知在集群部署中,MinIO返回所有环境变量,包括MINIO_SECRET_KEY和MINIO_ROOT_PASSWORD,导致信息泄露。

// minio/cmd/bootstrap-peer-server.gofunc (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.gofunc 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, }}

给出了补丁的commit https://github.com/minio/minio/commit/3b5dbf90468b874e99253d241d16d175c2454077

diff可见增加了敏感字段skip的操作

CVE-2023-28432 Minio信息泄露导致RCE

最终路由映射到 http://172.16.16.128:9001/minio/bootstrap/v1/verify

CVE-2023-28432 Minio信息泄露导致RCE

cmd/routers.go:75 判断了一下是集群才会注册上述路由

CVE-2023-28432 Minio信息泄露导致RCE

# poc

curl -XPOST http://172.16.16.128:9001/minio/bootstrap/v1/verify

# rce

minio是个go写的项目,go rce的方式不是很多,我的思路是找自更新的点。

在这个commit中 https://github.com/minio/minio/commit/05444a0f6af8389b9bb85280fc31337c556d4300

加了一个二进制文件签名校验


CVE-2023-28432 Minio信息泄露导致RCE


这个函数在cmd/admin-handlers.go ServerUpdateHandler函数中被调用,对应的路由为POST /minio/admin/v3/update?updateURL={updateURL} 有一些版本好像是v2

ServerUpdateHandler函数中经过了几个处理,代码比较长,我贴一下精简之后的

func (a adminAPIHandlers) ServerUpdateHandler(w http.ResponseWriter, r *http.Request) {  // 验证是否是admin权限  objectAPI, _ := validateAdminReq(ctx, w, r, iampolicy.ServerUpdateAdminAction)
// 从POST /minio/admin/v3/update?updateURL={updateURL}取updateURL参数 vars := mux.Vars(r) updateURL := vars["updateURL"] mode := getMinioMode()
// 解析url u, err := url.Parse(updateURL)
// 下载Release信息并解析出对应的更新信息 content, err := downloadReleaseURL(u, updateTimeout, mode) sha256Sum, lrTime, releaseInfo, err := parseReleaseData(content)
// 指定二进制文件的下载路径 u.Path = path.Dir(u.Path) + SlashSeparator + releaseInfo
// 下载二进制文件 reader, err := downloadBinary(u, mode)
// 验证签名 err = verifyBinary(u, sha256Sum, releaseInfo, mode, reader)
// 提交二进制文件 err = commitBinary()
// 发送重启信号给channel globalServiceSignalCh <- serviceRestart}


而在verifyBinary中envMinisignPubKey环境变量应该是默认为空,导致签名校验无效。



CVE-2023-28432 Minio信息泄露导致RCE

攻击者可以伪造updateURL来触发恶意自更新来执行任意二进制文件,不过这个动静可能有点大,而且恶意二进制文件应该是针对minio二开的,否则服务可能会挂掉。

最后一点,就是如何使用敏感信息泄露的用户来提权到admin用户。

commit应该是67f4ba154a27a1b06e48bfabda38355a010dfca5 看了下没看懂,先放一放,让子弹飞一会。

r师太吊了,打call。

文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。


原文地址:https://y4er.com/posts/minio-cve-2023-28432/


声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

@

学习更多渗透技能!体验靶场实战练习

CVE-2023-28432 Minio信息泄露导致RCE

hack视频资料及工具

CVE-2023-28432 Minio信息泄露导致RCE

(部分展示)



往期推荐

给第一次做渗透项目的新手总结的一些感悟

「登陆页面」常见的几种渗透思路与总结!

突破口!入职安服后的经验之谈

红队渗透下的入口权限快速获取

攻防演练|红队手段之将蓝队逼到关站!

CNVD 之5000w通用产品的收集(fofa)

自动化挖掘cnvd证书脚本

Xray捡洞中的高频漏洞

实战|通过供应链一举拿下目标后台权限

实战|一次真实的域渗透拿下域控(内网渗透)

看到这里了,点个“赞”、“再看”吧

原文始发于微信公众号(白帽子左一):CVE-2023-28432 Minio信息泄露导致RCE

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月29日23:38:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2023-28432 Minio信息泄露导致RCEhttps://cn-sec.com/archives/1843318.html

发表评论

匿名网友 填写信息