FlawOpen

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

● CVE-2026-73570 · CVSS 8.9[5], [10] · Высокий
Исследования · FlawOpen

CVE-2026-73570: как путь SNMP-уведомлений Zimbra привёл к внедрению команд

CVE-2026-73570 — не требующая аутентификации уязвимость внедрения команд в дополнительном пути SNMP-уведомлений Zimbra. Специально сформированное письмо могло повлиять на значение состояния, позднее подставляемое в команду shell. Zimbra исправила вызов в версии 10.1.20. Позднее Microsoft сообщила о сканирующих инструментах, проверявших уязвимый путь до публичного раскрытия.[1], [2], [5]

Вектор CVSSCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L[5], [10]
💡 Простыми словами (ELI5)

Сотрудник сортировки переносит надпись с конверта в рабочее задание. Раньше задание целиком передавали интерпретатору команд, который мог принять символы надписи за дополнительные инструкции. Исправление передаёт программе уведомлений список отдельных аргументов, поэтому надпись остаётся данными.[8], [9], [3]

Ключевые понятия и термины

swatchdog
Процесс мониторинга журналов, который в этом пути Zimbra обнаруживает сообщения о состоянии служб и запускает уведомления.[1]
SNMP trap
Уведомление, которое управляемая система отправляет получателю SNMP-мониторинга при событии.[1]
Интерполяция shell
Формирование текстовой команды для разбора оболочкой. Символы в недоверенных значениях могут изменить смысл команды.[8], [7]
system в списковой форме
Многоаргументная форма system в Perl запускает программу напрямую и передаёт аргументы по отдельности, не поручая shell разбирать строку команды.[9], [3]

Связи со стандартами

Анализ первопричины

Уязвимый код находится в rpmconf/Conf/swatchrc, функция dosnmp. Правило swatch извлекает имя службы из строки состояния и передаёт его через donotify как SERVICE; затем dosnmp вставляла значение в команду в обратных кавычках с $snmptrap. Обратные кавычки запускают shell, поэтому значение из журнала могло интерпретироваться как синтаксис команды. Документированные условия должны выполняться одновременно: Zimbra Collaboration Suite до 10.1.20, установлен дополнительный пакет zimbra-snmp и включены SNMP-уведомления. Microsoft сообщает, что специально сформированный SMTP-ввод мог попасть в этот путь. Компания наблюдала сканирующие инструменты, проверявшие уязвимую точку внедрения с 28 июля по 7 августа 2026 года — после исправления от 20 июля и до публичного раскрытия 13 августа. Исправление Zimbra заменяет строку shell на system(...) в списковой форме, передавая исполняемый файл и аргументы раздельно; shell больше не участвует в запуске. Анализ касается только кода SNMP-уведомлений и не означает, что уязвима любая установка Zimbra или SMTP-письмо.[1], [2], [3], [5], [7]

Матрица достижимости и исправления CVE-2026-73570

Условия развертыванияПрименим ли описанный путь?Защитное действие
Zimbra Collaboration Suite ниже 10.1.20; установлен дополнительный пакет zimbra-snmp; уведомления SNMP включены.Для описанного пути уведомлений необходимы все три условия. Microsoft сообщает, что специально сформированный SMTP-ввод мог влиять на значение статуса службы, которое позднее обрабатывал dosnmp.Обновите систему до 10.1.20 или новее. Проверьте журналы и телеметрию процессов за период воздействия; считайте индикаторы поводом для расследования, а не доказательством компрометации.
Пакет zimbra-snmp отсутствует или уведомления SNMP отключены.В этой конфигурации описанный путь уведомления dosnmp не активен. Это не доказывает отсутствие других уязвимостей на сервере.Оставьте функцию отключенной или пакет удаленным до обновления сервера. Проверьте все mailbox-узлы и настройки на каждом из них.
Zimbra Collaboration Suite 10.1.20 или новее с установленным исправленным пакетом.Описанное формирование shell-команды исправлено в версии 10.1.20. Номер версии сам по себе не подтверждает состояние всех узлов или локальные изменения.Проверьте версию и пакет на каждом узле; примените обычные процедуры расследования к прошлому периоду, если тогда выполнялись все три условия воздействия.

Пошаговый сценарий атаки

Шаг 1

Выполнены предварительные условия

Версия до 10.1.20, установлен zimbra-snmp, включены SNMP-уведомления.[1]

Шаг 2

Письмо влияет на мониторинг служб

Microsoft сообщает, что SMTP-запрос мог повлиять на значение состояния в журнале. Строки эксплойта и сетевые инструкции не приводятся.[1]

Шаг 3

swatchdog передаёт значение

Правило извлекает поле службы и через donotify передаёт его в dosnmp при включённых уведомлениях.[1]

Шаг 4

Shell воспринимает данные как команду

До патча обратные кавычки Perl передавали shell строку с захваченным значением от имени службы Zimbra.[1]

Шаг 5

10.1.20 удаляет shell из цепочки

Исправление передаёт snmptrap отдельные аргументы. Обновите систему и проверьте экспонированные узлы; исправление не исключает прежнюю активность.[1]

Исходный код: Уязвимый vs Защищённый вариант

Уязвимые обратные кавычки передавали shell интерполированную строку. Исправление использует system с несколькими аргументами и передаёт программу и аргументы по отдельности, поэтому метасимволы в SERVICE не становятся командами shell. Фрагмент показывает изменённый вызов, а не исполняемый эксплойт или полный файл.[3], [4], [8], [9]

Фрагмент исходного кода: rpmconf/Conf/swatchrc: dosnmp

УЯЗВИМАЯ РЕАЛИЗАЦИЯ
# Сокращённый фрагмент уязвимой dosnmp; вход эксплойта не показан.
sub dosnmp {
    my %args = (@_);
    `$snmptrap $snmpsvctrap $snmpsvcname s $args{SERVICE} $snmpsvcstatus i $statuses{$args{STATUS}}`;
}
БЕЗОПАСНЫЙ ИСПРАВЛЕННЫЙ ВАРИАНТ
# Исправление Zimbra 10.1.20: прямой запуск с отдельными аргументами.
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}}
    );
}

Чек-лист по защите системы для инженеров

Источники