FlawOpen

flawopen.com/Teardowns/cve-2026-73570-zimbra-snmp-command-injection

● CVE-2026-73570 · CVSS 8.9[5], [10] · Alta
Investigación · FlawOpen

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]

Vector CVSSCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L[5], [10]
💡 Explicación en Lenguaje Sencillo (ELI5)

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]
Interpolación en el shell
Construcción de un comando textual que analiza el shell. Los caracteres de valores no confiables pueden cambiar cómo se interpreta.[8], [7]
system en forma de lista
La forma de varios argumentos de system en Perl inicia directamente el programa y pasa cada argumento por separado, sin pedir al shell que analice una cadena de comandos.[9], [3]

Mapeos de marcos

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

Paso 1

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]

Paso 2

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]

Paso 3

swatchdog entrega el valor

Una regla captura el campo del servicio y lo pasa por donotify a dosnmp cuando se usan notificaciones SNMP.[1]

Paso 4

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]

Paso 5

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

IMPLEMENTACIÓN VULNERABLE
# 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}}`;
}
PARCHE SEGURO Y ROBUSTO
# 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

Fuentes