flawopen.com/Teardowns/cve-2026-73570-zimbra-snmp-command-injection
CVE-2026-73570: как путь SNMP-уведомлений Zimbra привёл к внедрению команд
CVE-2026-73570 — не требующая аутентификации уязвимость внедрения команд в дополнительном пути SNMP-уведомлений Zimbra. Специально сформированное письмо могло повлиять на значение состояния, позднее подставляемое в команду shell. Zimbra исправила вызов в версии 10.1.20. Позднее Microsoft сообщила о сканирующих инструментах, проверявших уязвимый путь до публичного раскрытия.[1], [2], [5]
Сотрудник сортировки переносит надпись с конверта в рабочее задание. Раньше задание целиком передавали интерпретатору команд, который мог принять символы надписи за дополнительные инструкции. Исправление передаёт программе уведомлений список отдельных аргументов, поэтому надпись остаётся данными.[8], [9], [3]
Ключевые понятия и термины
swatchdog- Процесс мониторинга журналов, который в этом пути Zimbra обнаруживает сообщения о состоянии служб и запускает уведомления.[1]
SNMP trap- Уведомление, которое управляемая система отправляет получателю SNMP-мониторинга при событии.[1]
Связи со стандартами
- Ссылка CWE для слабого места, описанного в этом руководстве: CWE-78
- CISA KEV — добавлено 2026-08-21 — CVE-2026-73570
Анализ первопричины
Уязвимый код находится в 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. Номер версии сам по себе не подтверждает состояние всех узлов или локальные изменения. | Проверьте версию и пакет на каждом узле; примените обычные процедуры расследования к прошлому периоду, если тогда выполнялись все три условия воздействия. |
Пошаговый сценарий атаки
Выполнены предварительные условия
Версия до 10.1.20, установлен zimbra-snmp, включены SNMP-уведомления.[1]
Письмо влияет на мониторинг служб
Microsoft сообщает, что SMTP-запрос мог повлиять на значение состояния в журнале. Строки эксплойта и сетевые инструкции не приводятся.[1]
swatchdog передаёт значение
Правило извлекает поле службы и через donotify передаёт его в dosnmp при включённых уведомлениях.[1]
Shell воспринимает данные как команду
До патча обратные кавычки Perl передавали shell строку с захваченным значением от имени службы Zimbra.[1]
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}}
);
}
Чек-лист по защите системы для инженеров
- ✓Обновите все установки Zimbra Collaboration до версии 10.1.20 или новее и проверьте пакеты на каждом mailbox-узле.[2], [1]
- ✓Проверьте, установлен ли
zimbra-snmpи включены ли SNMP-уведомления. Если обновление задерживается, удалите дополнительный пакет либо отключите уведомления и ограничьте SMTP и SNMP доверенными системами.[1] - ✓Считайте подверженными не обновлённые из Интернета системы, где выполнены оба условия. Проверьте журналы и телеметрию конечных точек на неожиданные значения состояния и необычные дочерние процессы Perl или swatchdog.[1], [6]
- ✓Если система была доступна до исправления, сохраните журналы, определите затронутые mailbox-узлы, проверьте закрепление и активность учётных записей; смените секреты, если этого требуют доказательства или уровень воздействия.[1], [6]
- ✓При проверке кода запрещайте запуск shell-строк со значениями из журналов, почты и других внешних источников. Используйте API с вектором аргументов; строго проверяйте интерфейсы, где shell неизбежен.[8], [9], [7], [3]
- ✓Добавьте регрессионный тест: значение службы передаётся одним литеральным аргументом и shell не запускается. Используйте безвредные строки с метасимволами в изолированном тестовом стенде.[3], [9]
Источники
- Microsoft Threat Intelligence: эксплуатация и исправление CVE-2026-73570
- Примечания к выпуску Zimbra 10.1.20 — исправление SNMP
- Патч upstream: коммит 92b6ebe Zimbra/zm-build
- PR #333 Zimbra/zm-build
- NVD/GitHub Advisory Database: CVE-2026-73570, CWE-78, CVSS 8.9
- Запись в каталоге CISA известных эксплуатируемых уязвимостей
- MITRE CWE-78: OS command injection
- Perl perlop: command execution with backticks
- Perl system function documentation
- NVD: CVE-2026-73570