MinIO服務器端請求偽造漏洞(CVE-2021-21287)

發布時間 2021-02-03

0x00 漏洞概述

CVE  ID

CVE-2021-21287

時   間

2021-02-03

類   型

SSRF

等   級

高危

遠程利用

影響范圍


 

0x01 漏洞詳情

image.png

 

簡述

MinIO是一個基于Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3云存儲服務接口,適用于存儲大容量非結構化的數據(如圖片、視頻、日志文件、備份數據和容器/虛擬機鏡像等),作為一款支持部署在私有云的開源對象存儲系統,MinIO在全球被廣泛使用。

2021年02月03日,phith0n公開披露了MinIO中的一個服務器端請求偽造漏洞(CVE-2021-21287),其CVSS評分7.7。由于MinIO組件中LoginSTS接口設計不當,導致存在服務器端請求偽造漏洞。攻擊者可以通過構造URL來發起服務器端請求偽造攻擊,成功利用此漏洞的攻擊者能夠通過利用服務器上的功能來讀取、更新內部資源或執行任意命令。該漏洞無需用戶驗證即可遠程利用,目前已被修復。

 

漏洞細節

MinIO組件中LoginSTS接口其實是AWS STS登錄接口的一個代理,用于將發送到JsonRPC的請求轉變成STS的方式轉發給本地的9000端口。

// LoginSTS - STS user login handler.

func (web *webAPIHandlers) LoginSTS(r *http.Request, args *LoginSTSArgs, reply *LoginRep) error {

 ctx := newWebContext(r, args, "WebLoginSTS")

 

 v := url.Values{}

 v.Set("Action", webIdentity)

 v.Set("WebIdentityToken", args.Token)

 v.Set("Version", stsAPIVersion)

 

 scheme := "http"

    // ...

 

 u := &url.URL{

  Scheme: scheme,

  Host:   r.Host,

 }

 

 u.RawQuery = v.Encode()

 req, err := http.NewRequest(http.MethodPost, u.String(), nil)

 // ...

}

由于邏輯設計不當,MinIO會將用戶發送的HTTP頭Host中獲取到地址作為URL的Host來構造新的URL。但由于請求頭是用戶可控的,所以可以構造任意的Host,最終導致存在SSRF漏洞。

 

影響范圍

MinIO < RELEASE.2021-01-30T00-20-58Z

 

 

0x02 處置建議

目前該漏洞已被修復,建議升級至RELEASE.2021-01-30T00-20-58Z。

下載鏈接:

https://github.com/minio/minio/releases/tag/RELEASE.2021-01-30T00-20-58Z

 

解決方法

配置環境變量“ MINIO_BROWSER = off”。

 

0x03 參考鏈接

https://mp.weixin.qq.com/s/X04IhY9Oau-kDOVbok8wEw

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-21287

https://nvd.nist.gov/vuln/detail/CVE-2021-21287

 

0x04 時間線

2021-02-02  phith0n披露漏洞

2021-02-03  VSRC發布安全通告

 

0x05 附錄

 

CVSS評分標準官網:http://www.first.org/cvss/

image.png