← voltar
CVE-2019-9621highsob ataqueCWE-918

CVE-2019-9621

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 7.5epss 81%
da publicação à arma0 dias
Publicada no NVD30 de abr.
1ª PoC12 de abr.
metasploit13 de mar.
CISA KEV+2260d
probabilidade de exploração
81%top 1% das CVEs
exploração observada
simCISA + VulnCheck
7 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2025-07-28

Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.

Resumo

Vulnerabilidade de Server-Side Request Forgery (SSRF) no componente ProxyServlet do Zimbra Collaboration Suite, que permite a um atacante fazer o próprio servidor Zimbra encaminhar requisições para portas e serviços internos — inclusive a porta administrativa 7071 — normalmente inacessíveis externamente. Sozinha ela exige um token de autenticação válido, mas ganhou notoriedade por ser a peça central de uma cadeia pré-autenticação (junto com a XXE CVE-2019-9670) que resulta em execução remota de código. Está no catálogo KEV da CISA, tem módulo Metasploit público e exploração confirmada em ambientes reais.

Detalhamento técnico

O bug está em ProxyServlet.doProxy(), responsável por encaminhar (proxy) requisições HTTP para outros destinos dentro da infraestrutura Zimbra. O código deveria restringir esse encaminhamento a um conjunto de domínios/portas permitidos, exceto quando a requisição vem de um administrador — e é aí que a lógica falha. Classificado pelo próprio Zimbra como CWE-918 (SSRF) / CWE-807 (dependência de dado não confiável para decisão de segurança).

O primeiro problema: para decidir se a requisição é 'de admin', o servlet usa ServletRequest.getServerPort(), método que no Java Servlet API retorna a porta declarada no header Host da requisição — um valor totalmente controlado pelo cliente, não a porta real de conexão TCP. Um atacante que envia um header como 'Host: algumacoisa:7071' faz o servidor crer que a requisição chegou pela porta administrativa, mesmo tendo sido enviada pela porta pública normal.

O segundo problema: a verificação do token de admin só ocorre quando ele é passado como parâmetro de URL — mas nada impede que o token seja enviado via cookie, contornando essa checagem. Combinando os dois defeitos, um requisitante com qualquer token de usuário válido (não necessariamente de admin) e um Host header manipulado consegue fazer o ProxyServlet encaminhar requisições arbitrárias a serviços internos do próprio host Zimbra, incluindo a interface administrativa na porta 7071, que normalmente está bloqueada de acesso externo por rede.

O valor real da falha aparece na cadeia documentada por An Trinh (pesquisador, blog tint0): usando a XXE do Autodiscover Servlet (CVE-2019-9670) para ler o localconfig.xml e obter a senha LDAP da conta interna 'zimbra', é possível gerar um token de usuário comum via um truque no AuthRequest SOAP (usar 'adminName' em vez de 'name' para autenticar contra a conta zimbra pela branch normal de usuários). Esse token — sem privilégio de admin — é então usado com a SSRF do ProxyServlet para reencaminhar um AuthRequest de admin para a porta 7071 local, obtendo aí um cookie de administração global. Com esse cookie, a extensão ClientUploader permite subir um webshell JSP e executar comandos no host.

Como é explorada

Isoladamente, o SSRF exige que o atacante já possua um token de sessão válido (de qualquer usuário, não necessariamente admin) e capacidade de manipular o header Host e o cookie da requisição HTTP contra o ProxyServlet exposto na interface web pública — não há necessidade de acesso de rede à porta 7071, que é justamente o que a falha contorna. Não é necessária configuração não padrão: o ProxyServlet é parte do fluxo normal do webapp.

Na prática documentada e na cadeia usada por ferramentas públicas (Metasploit, PoCs, template Nuclei), a exploração completa não exige autenticação prévia alguma: o atacante começa lendo o localconfig.xml via XXE (CVE-2019-9670) para obter as credenciais da conta zimbra, gera um token de usuário através do truque no AuthRequest, e só então usa esta SSRF para escalar esse token a um cookie de admin via a porta 7071 local. O resultado final é execução remota de código não autenticada, via upload de webshell pela extensão ClientUploader — daí a classificação no Metasploit como 'excellent' ranking e a listagem no KEV da CISA.

Complexidade de exploração é baixa depois de compreendido o encadeamento (é a base do módulo público exploit/linux/http/zimbra_xxe_rce), mas a SSRF por si só, sem a XXE associada e sem um token prévio, tem valor limitado — o atacante precisa de algum crédito de autenticação primeiro. É a combinação com CVE-2019-9670 que transforma isso em RCE pré-autenticação total.

Versões

Afetadas
Zimbra Collaboration Suite anterior a 8.6 Patch 13; 8.7.x anterior a 8.7.11 Patch 10; 8.8.x anterior a 8.8.10 Patch 7; e 8.8.x anterior a 8.8.11 Patch 3.
Corrigidas em
8.6 Patch 13; 8.7.11 Patch 10; 8.8.10 Patch 7; 8.8.11 Patch 3 (e, segundo suporte Zimbra em resposta a usuários, 8.8.9 Patch 10 também corrige). Versões posteriores dos mesmos ramos (ex.: patches subsequentes de 8.7.11 e 8.8.12) mantêm a correção.

Como se proteger

A correção do fornecedor está nas versões de patch específicas: 8.6 Patch 13, 8.7.11 Patch 10, 8.8.10 Patch 7 e 8.8.11 Patch 3 (ou versões posteriores dentro de cada ramo). Zimbra confirmou em respostas de suporte que 8.8.9 Patch 10 também é seguro. Versões 8.6.0 e anteriores estão fora de suporte — não há patch backport garantido além do Patch 13 citado, e o fornecedor recomenda migração para pelo menos 8.7.11 com o patch aplicável.

Se a atualização não for imediatamente viável, bloquear acesso externo à porta 7071 NÃO mitiga sozinho essa falha específica — o próprio mecanismo do bug é fazer o servidor Zimbra, a partir de dentro, se conectar à sua própria porta administrativa via loopback, contornando qualquer controle de firewall perimetral nessa porta. Um controle compensatório real precisa atuar na camada de aplicação: um WAF ou proxy reverso capaz de normalizar/validar o header Host antes de repassá-lo ao Zimbra (rejeitando valores com porta diferente da porta real de conexão) reduz a superfície, mas é paliativo imperfeito e não substitui o patch, já que a lógica de verificação de admin do próprio ProxyServlet é o que está quebrado.

Como a exploração real depende de encadear esta falha com a XXE do Autodiscover Servlet (CVE-2019-9670), corrigir só uma das duas ainda deixa risco residual — os patches acima corrigem ambas simultaneamente, então a mitigação eficaz é sempre a atualização completa para a versão/patch indicada, não uma correção isolada.

Como detectar

Nos logs de acesso do Zimbra, procure requisições ao ProxyServlet (rota típica /service/proxy ou equivalente conforme a versão) com headers Host contendo uma porta diferente da porta real em que o serviço público escuta — por exemplo, um Host apontando para ':7071' em uma requisição que chegou pela porta pública (80/443). Isso é o indicador mais direto e específico dessa falha, já que é exatamente o mecanismo de bypass.

Como a exploração completa documentada encadeia esta SSRF com a XXE de CVE-2019-9670, também vale monitorar requisições ao Autodiscover Servlet contendo entidades XML externas (DOCTYPE/ENTITY) e uploads subsequentes via a extensão ClientUploader — a presença de um webshell JSP recém-criado em diretórios de upload do Zimbra é sinal de comprometimento já consumado, não apenas de tentativa.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
Zimbra Collaboration Suite before 8.6 patch 13, 8.7.x before 8.7.11 patch 10, and 8.8.x before 8.8.10 patch 7 or 8.8.x before 8.8.11 patch 3 allows SSRF via the ProxyServlet component.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Produtos afetados
n/a · n/a
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.