flawopen.com/Teardowns/cve-2026-73570-zimbra-snmp-command-injection
CVE-2026-73570: cómo la ruta SNMP de Zimbra permitió inyección de comandos
CVE-2026-73570 es una falla de inyección de comandos sin autenticación en la ruta opcional de notificaciones SNMP de Zimbra. Un correo especialmente elaborado podía influir en un valor de estado que después se interpolaba en un comando de shell; Zimbra corrigió la invocación en 10.1.20. Más tarde, Microsoft informó de herramientas de escaneo que sondeaban la ruta vulnerable antes de su divulgación pública.[1], [2], [5]
Una persona de recepción copia la etiqueta de un sobre en una orden de trabajo. El proceso anterior entregaba toda la orden a un intérprete de comandos, que podía confundir caracteres de la etiqueta con instrucciones adicionales. La corrección entrega al programa de notificación una lista de argumentos separados, de modo que la etiqueta siga siendo un dato.[8], [9], [3]
Conceptos Clave y Términos
swatchdog- Proceso de supervisión de registros usado por esta ruta de Zimbra para detectar mensajes de estado y activar notificaciones.[1]
Trap SNMP- Notificación que un sistema administrado envía a un receptor de monitorización SNMP cuando ocurre un evento.[1]
Mapeos de marcos
- Referencia CWE para la debilidad descrita en esta guía: CWE-78
- CISA KEV — añadido el 2026-08-21 — CVE-2026-73570
Análisis de Causa Raíz
El código afectado está en rpmconf/Conf/swatchrc, función dosnmp. Una regla de swatch captura un nombre de servicio de una línea de estado y lo pasa mediante donotify como SERVICE; dosnmp insertaba ese valor en un comando entre acentos graves que contenía $snmptrap. Como los acentos graves invocan un shell, el valor procedente del registro podía interpretarse como sintaxis de comandos. Las precondiciones documentadas deben cumplirse a la vez: Zimbra Collaboration Suite anterior a 10.1.20, paquete opcional zimbra-snmp instalado y notificaciones SNMP habilitadas. Microsoft informa de que una entrada SMTP especialmente elaborada podía alcanzar esta ruta. Observó herramientas de escaneo que sondeaban el punto de inyección vulnerable del 28 de julio al 7 de agosto de 2026, después de la corrección del 20 de julio y antes de la divulgación pública del 13 de agosto. La corrección de Zimbra sustituye la cadena de shell por system(...) en forma de lista, con ejecutable y argumentos separados; el shell queda fuera del flujo de ejecución. Este análisis se limita al código de notificaciones SNMP y no implica que toda instalación de Zimbra o mensaje SMTP sea vulnerable.[1], [2], [3], [5], [7]
Matriz de alcance y corrección de CVE-2026-73570
| Condiciones de despliegue | ¿Se aplica la ruta documentada? | Acción defensiva |
|---|---|---|
Zimbra Collaboration Suite anterior a 10.1.20; paquete opcional zimbra-snmp instalado; notificaciones SNMP habilitadas. | Las tres condiciones son necesarias para la ruta de notificación documentada. Microsoft informa que una entrada SMTP preparada podía influir en el valor de estado del servicio que después procesaba dosnmp. | Actualiza a 10.1.20 o posterior. Revisa los registros pertinentes y la telemetría de procesos del período expuesto; trata los indicadores como pistas de investigación, no como prueba de compromiso. |
Paquete zimbra-snmp ausente o notificaciones SNMP deshabilitadas. | La ruta de notificación dosnmp descrita no está activa con esta configuración. Esto no demuestra que el servidor esté libre de otras vulnerabilidades. | Mantén la función deshabilitada o el paquete ausente hasta parchear el servidor. Inventaría todos los nodos de mailbox y confirma la configuración en cada uno. |
| Zimbra Collaboration Suite 10.1.20 o posterior, con el paquete corregido por el proveedor instalado. | La construcción de comandos de shell documentada se corrigió en 10.1.20. El número de versión por sí solo no verifica todos los nodos ni las modificaciones locales. | Verifica la versión y el paquete instalados en cada nodo y realiza la investigación habitual de incidentes para cualquier período anterior que cumpliera las tres condiciones de exposición. |
Flujo de Ataque Paso a Paso
Se cumplen las precondiciones
La versión es anterior a 10.1.20, el paquete zimbra-snmp está instalado y las notificaciones SNMP están activas.[1]
El correo influye en la supervisión
Microsoft informa de que una solicitud SMTP podía influir en un valor de estado registrado. Aquí se omiten cadenas de explotación e instrucciones de red.[1]
swatchdog entrega el valor
Una regla captura el campo del servicio y lo pasa por donotify a dosnmp cuando se usan notificaciones SNMP.[1]
El shell interpreta los datos como comandos
Antes del parche, las comillas invertidas de Perl entregaban al shell una cadena que contenía el valor capturado, bajo la cuenta de servicio de Zimbra.[1]
10.1.20 quita el shell
La corrección llama a snmptrap con argumentos separados. Actualiza e investiga las instancias expuestas; corregir no descarta actividad anterior.[1]
Código Fuente: Vulnerable vs. Seguro
Las comillas invertidas vulnerables entregaban al shell una cadena interpolada. El parche usa system con varios argumentos y pasa el ejecutable y cada argumento por separado, por lo que los metacaracteres de SERVICE no se convierten en instrucciones del shell. El fragmento se centra en la llamada modificada; no es un exploit ejecutable ni una copia completa del archivo.[3], [4], [8], [9]
Fragmento de origen: rpmconf/Conf/swatchrc: dosnmp
# Versión condensada de dosnmp afectada; no se muestra entrada de explotación.
sub dosnmp {
my %args = (@_);
`$snmptrap $snmpsvctrap $snmpsvcname s $args{SERVICE} $snmpsvcstatus i $statuses{$args{STATUS}}`;
}
# Corrección de Zimbra 10.1.20: ejecutar con argumentos separados.
sub dosnmp {
my %args = (@_);
system(
"/opt/zimbra/common/bin/snmptrap",
"-v", "2c", "-c", "zimbra", $traphost, "",
$snmpsvctrap, $snmpsvcname, "s", $args{SERVICE},
$snmpsvcstatus, "i", $statuses{$args{STATUS}}
);
}
Lista de Verificación de Seguridad para Ingeniería
- ✓Actualiza todas las instalaciones de Zimbra Collaboration anteriores a 10.1.20 a la versión 10.1.20 o posterior y comprueba los paquetes en todos los nodos mailbox.[2], [1]
- ✓Inventaría si
zimbra-snmpestá instalado y si las notificaciones SNMP están activas. Si no puedes aplicar el parche de inmediato, elimina el paquete opcional o desactiva las notificaciones según corresponda, y limita SMTP y SNMP a sistemas confiables.[1] - ✓Considera expuestas las instancias sin parche accesibles desde Internet que cumplan ambas precondiciones. Revisa registros y telemetría de endpoint para detectar valores de estado inesperados y procesos hijos anómalos de Perl o swatchdog.[1], [6]
- ✓Si hubo exposición antes de aplicar el parche, conserva los registros, delimita los nodos mailbox afectados, revisa persistencia y actividad de cuentas, y rota secretos si la evidencia o la exposición lo justifican.[1], [6]
- ✓En las revisiones de código, prohíbe ejecutar cadenas de shell que incorporen valores procedentes de registros, correo u otras entradas externas. Prefiere API con vector de argumentos y valida estrictamente cualquier interfaz que siga dependiendo del shell.[8], [9], [7], [3]
- ✓Añade una prueba de regresión que demuestre que el valor del servicio se entrega como un argumento literal y no inicia un shell; prueba con cadenas benignas con metacaracteres en un entorno aislado.[3], [9]
Fuentes
- Microsoft Threat Intelligence: explotación y corrección de CVE-2026-73570
- Notas de Zimbra 10.1.20 — corrección de la inyección en SNMP
- Parche upstream: commit 92b6ebe de Zimbra/zm-build
- PR #333 de Zimbra/zm-build
- NVD/GitHub Advisory Database: CVE-2026-73570, CWE-78 y CVSS 8.9
- Entrada en el catálogo de vulnerabilidades explotadas de CISA
- MITRE CWE-78: OS command injection
- Perl perlop: command execution with backticks
- Perl system function documentation
- NVD: CVE-2026-73570