← volver
CVE-2019-9621highbajo ataqueCWE-918

CVE-2019-9621

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 7.5epss 81%
de la publicación al arma0 días
Publicada en NVD30 abr
1ª PoC12 abr
metasploit13 mar
CISA KEV+2260d
probabilidad de explotación
81%top 1% de las CVE
explotación observada
CISA + VulnCheck
7 exploit(s) público(s)
Acción exigida por CISAplazo 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.

Resumen

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.

Detalle 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.

Cómo se explota

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.

Versiones

Afectadas
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.
Corregidas en
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.

Cómo protegerse

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.

Cómo 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.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
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
Productos afectados
n/a · n/a
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.