当前位置: 首页 > news >正文

MinIO从信息泄漏到RCE

文章目录

    • 信息泄露
      • 漏洞利用
      • 漏洞分析
      • 漏洞修复
    • RCE
      • 漏洞分析
    • 参考文章

信息泄露

漏洞利用

如果MinIO以集群方式部署,存在信息泄露漏洞,攻击者可以通过HTTP请求获取目标进程的所有环境变量,包括MINIO_SECRET_KEYMINIO_ROOT_PASSWORD.

vulhub有环境可以复现

payload:

POST:  /minio/bootstrap/v1/verify

image-20230408152805286

拿到预存的用户名和密码可以直接登录了

漏洞分析

根据main.go中的加载模块得知代码逻辑在minio/cmd中

package main // import "github.com/minio/minio"import ("os"// MUST be first import._ "github.com/minio/minio/internal/init"minio "github.com/minio/minio/cmd"
)func main() {minio.Main(os.Args)
}

漏洞代码在minio/cmd/bootstrap-peer-server.go

接受HTTP请求的方法只有两个

image-20230408152821951

line133,代码新建上下文对象,用于传递HTTP请求和响应。 line135,用于输出错误日志。 line134作为则是获取服务器系统配置。

跟进line134的getServerSystemCfg()

image-20230408152835316

在getServerSystemCfg()方法中获取所有以MINIO_开头的环境变量

将环境变量存储在envValues里面,其中envValues采用遍历的方式获取了skipEnvs[envK]的value

然后,函数返回一个名为ServerSystemConfig的结构体,其中包含了全局变量和环境变量。

跟进skipEnvs

image-20230408152844359

包含一些敏感信息,有预先设置的密码MINIO_CERT_PASSWD

bootstrap-peer-server.go也定义了Verify的路由

image-20230408152851274 image-20230408152900101

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

image-20230408152915973

漏洞修复

环境变量进行了加密处理

https://github.com/minio/minio/commit/3b5dbf90468b874e99253d241d16d175c2454077?diff=split

image-20230408152928069

image-20230408152933961

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(),跟进后是

image-20230408153001674

由于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

http://www.lryc.cn/news/58827.html

相关文章:

  • 202.Spark(九):SparkStreaming案例实操
  • GlusterFS(GFS)分布式文件系统
  • ChatGPT文本框再次升级,打造出新型操作系统
  • DPU02国产USB转UART控制芯片替代CP2102
  • Softing新版HART多路复用器软件支持西门子控制器
  • 〖Python网络爬虫实战⑫〗- XPATH语法介绍
  • 实例方法、类方法、静态方法、实例属性、类属性
  • 数据结构---二叉树
  • CMake——从入门到百公里加速6.7s
  • 无公网IP,在外公网远程访问RabbitMQ服务「内网穿透」
  • Node【二】NPM
  • 【2023最新】超详细图文保姆级教程:App开发新手入门(2)
  • sftp使用
  • FastGithub---------不再为访问github苦恼
  • Spring Boot AOP @Pointcut拦截注解的表达式与运算符
  • 2023年第十四届蓝桥杯javaB组省赛真题
  • CefSharp.WinForms 112.2.70最新版体验
  • leetcode每日一题:数组篇(1/2)
  • 每个企业经营者都应该了解的几个网络安全趋势
  • IDEA操作MongoDB快速上手开发
  • 从FPGA说起的深度学习(六)-任务并行性
  • 5.39 综合案例2.0 - STM32蓝牙遥控小车4(体感控制)
  • Scala之面向对象
  • 深度学习目标检测项目实战(四)—基于Tensorflow object detection API的骨折目标检测及其界面运行
  • 嵌入式工程师如何快速的阅读datasheet的方法
  • (三)合约广告
  • 【Android -- 软技能】分享一个学习方法
  • Python-DQN代码阅读(10)
  • MongoDB入坑
  • 【论文总结】针对操作系统级虚拟化的抽象资源攻击