MinIO 検証インターフェイスの機密情報開示の脆弱性
序章
脆弱性の説明: MinIO は、Amazon S3 API と互換性があり、プライベート クラウドまたはパブリック クラウドで使用できるオープン ソースのオブジェクト ストレージ サービスです。MinIO は、大量のデータを格納し、データの高速読み取りおよび書き込み機能を提供できる、高性能で可用性の高い分散ストレージ システムです。MinIO は分散アーキテクチャを採用し、複数のノードで実行して分散ストレージとデータ処理を実現できます。
影響範囲: MinIO 検証インターフェイスに機密情報漏えいの脆弱性があり、攻撃者は特別な URL アドレスを作成して機密システム情報を読み取ることができます。
悪用ペイロード
POST /minio/bootstrap/v1/verify HTTP/1.1
脆弱性検出方法
HTTP リクエスト:
GET /api/v1/check-version
HTTP 応答:
HTTP/1.1 200 OK
Connection: close
Content-Type: application/json
Date: Fri, 24 Mar 2023 06:26:01 GMT
Server: MinIO Console
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Xss-Protection: 1; mode=block
Content-Length: 69
{
"latest_version": "minio/minio:RELEASE.2023-03-22T06-36-24Z"
}
latest_version の値が <RELEASE.2023-03-20T20-16-18Z の場合、脆弱性があります。
脆弱なコード分析
まず、攻撃負荷によると、ブートストラップが呼び出されていることがわかります。main.go のロード モジュールによると、コード ロジックは minio/cmd にあります。
次に、アプリケーションのルートを確認したところ、脆弱性のあるファイルがbootstrap-peer-server.goであることがわかりました。
ファイル内で HTTP リクエストを受け付ける場所を見つける HTTP リクエストを受け付ける方法は、
Line130 と Line132 の 2 つだけです。
攻撃ペイロードの検証によると、入り口は Line132 にあります。プログラムが入り口で何をするか見てみましょう。
行 133、コードは、HTTP 要求と応答を渡すための新しいコンテキスト オブジェクトを作成します。
135行目、エラーログ出力用。
134行目はサーバーのシステム構成を取得するためのものです。
次に、 getServerSystemCfg() が何をするかを見る必要があります。環境変数は getServerSystemCfg() メソッドで取得されます。ここで envValues は、skipEnvs[envK] の値をトラバーサルで取得します。
skipEnvs には何が含まれていますか? MINIO_CERT_PASSWD などの機密情報が含まれています
MINIO_CERT_PASSWD の値は、アカウントのパスワード情報がプレーン テキストで保存されている buildscripts\upgrade-tests\minio.env から取得されます。
結局、ロジックの認証不足により、不正アクセスの脆弱性が引き起こされます。