小地方网站建设公司,中国建设行业网,wordpress 字体不一样,多语言企业网站开发文章目录信息泄露漏洞利用漏洞分析漏洞修复RCE漏洞分析参考文章信息泄露
漏洞利用
如果MinIO以集群方式部署#xff0c;存在信息泄露漏洞#xff0c;攻击者可以通过HTTP请求获取目标进程的所有环境变量#xff0c;包括MINIO_SECRET_KEY和MINIO_ROOT_PASSWORD.
vulhub有环…
文章目录信息泄露漏洞利用漏洞分析漏洞修复RCE漏洞分析参考文章信息泄露
漏洞利用
如果MinIO以集群方式部署存在信息泄露漏洞攻击者可以通过HTTP请求获取目标进程的所有环境变量包括MINIO_SECRET_KEY和MINIO_ROOT_PASSWORD.
vulhub有环境可以复现
payload
POST: /minio/bootstrap/v1/verify拿到预存的用户名和密码可以直接登录了
漏洞分析
根据main.go中的加载模块得知代码逻辑在minio/cmd中
package main // import github.com/minio/minioimport (os// MUST be first import._ github.com/minio/minio/internal/initminio github.com/minio/minio/cmd
)func main() {minio.Main(os.Args)
}漏洞代码在minio/cmd/bootstrap-peer-server.go
接受HTTP请求的方法只有两个 line133,代码新建上下文对象用于传递HTTP请求和响应。 line135,用于输出错误日志。 line134作为则是获取服务器系统配置。
跟进line134的getServerSystemCfg() 在getServerSystemCfg()方法中获取所有以MINIO_开头的环境变量
将环境变量存储在envValues里面其中envValues采用遍历的方式获取了skipEnvs[envK]的value
然后函数返回一个名为ServerSystemConfig的结构体其中包含了全局变量和环境变量。
跟进skipEnvs 包含一些敏感信息有预先设置的密码MINIO_CERT_PASSWD
bootstrap-peer-server.go也定义了Verify的路由 cmd/routers.go:75 判断了一下是集群才会注册上述路由 漏洞修复
环境变量进行了加密处理
https://github.com/minio/minio/commit/3b5dbf90468b874e99253d241d16d175c2454077?diffsplit RCE
漏洞分析
当通过信息泄漏获得账号密码之后可以登陆MinIO更新恶意升级URL并且执行update触发RCE
验证管理员权限→获取最新版本→获取最新版本的sha256sum信息→下载并验证sha256sum→验证无误后替换自身并重启。
cmd/admin-handlers.go ServerUpdateHandler函数
在/minio/admin/v3/update?updateURL{updateURL}这个路由的功能中可以从远程加载二进制文件下载并更新。
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()// 解析urlu, 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()// 发送重启信号给channelglobalServiceSignalCh - serviceRestart
}验证签名用的verifyBinary(),跟进后是 由于envMinisignPubKey为空所以sha256sum失效了。所以我们可以构造恶意升级包最终形成RCE
具体利用可以参考https://github.com/AbelChe/evil_minio
参考文章
https://www.gksec.com/MinIO_RCE.html
https://y4er.com/posts/minio-cve-2023-28432/
https://ek1ng.com/CVE-2023-28432.html