← volver
CVE-2019-10149criticalbajo ataqueCWE-78

CVE-2019-10149

100Vexday Risk Score

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

ssvc Actcvss 9epss 100%
de la publicación al arma0 días
Publicada en NVD5 jun
1ª PoC12 jul
metasploit5 jun
CISA KEV+950d
probabilidad de explotación
100%top 1% de las CVE
explotación observada
CISA + VulnCheck
39 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-07-10

Apply updates per vendor instructions.

Resumen

Falha de execução remota de comandos no Exim MTA, presente por padrão em todas as instalações das versões 4.87 a 4.91 — não é um bug de memória, é execução de comando via execv() com privilégios de root através de expansão de string mal controlada. A exploração local é trivial e imediata; a remota, na configuração padrão, exige manter uma conexão SMTP aberta por 7 dias, o que reduz drasticamente o risco em ambientes com timeouts normais, mas se torna trivial em configurações não-padrão comuns (relay como MX secundário, tags no local-part, ACL de verificação removida).

Detalle técnico

A falha está em deliver_message(), em src/deliver.c, dentro de um bloco protegido por #ifndef DISABLE_EVENT. Esse bloco roda sempre que process_recipients != RECIP_ACCEPT (ou seja, em processamento de falha/bounce de entrega) e constrói deliver_localpart e deliver_domain chamando expand_string() sobre strings do tipo "${local_part:%s}" e "${domain:%s}", onde %s é new->address — o endereço do destinatário controlado pelo remetente da mensagem. O motor de expansão do Exim reconhece o item "${run{ }}" e o executa como efeito colateral da própria expansão, independentemente de o valor expandido ser usado depois ou de a opção event_action estar configurada.

Cómo se explota

Localmente, qualquer usuário com capacidade de enviar mensagem (mail local, shared hosting, etc.) pode enviar um e-mail cujo destinatário seja algo como "${run{...}}@localhost", onde "localhost" é um domínio local do Exim. Como deliver_drop_privilege é false por padrão, o comando é executado como root, de forma instantânea e sem pré-condições especiais além de acesso ao MTA.

Remotamente, a ACL padrão "verify = recipient" exige que a parte local do endereço corresponda a um usuário local existente, o que impede o vetor direto. A Qualys demonstrou que, na configuração padrão, é possível burlar isso mantendo uma conexão SMTP aberta por cerca de 7 dias, enviando um byte a cada poucos minutos — método viável mas de baixa praticidade operacional (por isso AC:H no vetor CVSS). Já em configurações não-padrão — ACL de verificação de destinatário removida manualmente, uso de "local_part_suffix" (tags do tipo +/- no local-part), ou Exim atuando como relay/MX secundário para um domínio remoto — o vetor remoto se torna tão trivial quanto o local, sem necessidade de conexão prolongada.

Existe exploração ativa confirmada (a CVE está no catálogo KEV da CISA), PoC pública e módulo Metasploit, o que tornou o bug alvo de campanhas automatizadas de varredura e comprometimento de servidores Exim expostos logo após a divulgação em 2019.

Versiones

Afectadas
Exim 4.87 até 4.91 (inclusive). Versões anteriores a 4.87 também podem ser vulneráveis se a opção experimental EXPERIMENTAL_EVENT tiver sido habilitada manualmente na compilação.
Corregidas en
Exim 4.92 e superior corrige o problema (fix já presente desde o lançamento de 4.92, embora não catalogado como correção de segurança na época). Para a faixa 4.87–4.91, patch backport disponível no branch exim-4_91+fixes (commit d740d2111f189760593a303124ff6b9b1f83453d). Backports de distribuição: Debian stretch 4.89-2+deb9u4 (DSA-4456-1); Gentoo e openSUSE publicaram avisos e pacotes corrigidos próprios.

Cómo protegerse

A correção definitiva é atualizar para Exim 4.92 ou superior — a falha foi corrigida nessa versão (lançada em fevereiro de 2019, commit 7ea1237c783e380d7bdb86c90b13d8203c7ecf26) antes mesmo de ser identificada como vulnerabilidade de segurança. Para quem está preso na faixa 4.87–4.91, os mantenedores publicaram um patch específico no branch exim-4_91+fixes (commit d740d2111f189760593a303124ff6b9b1f83453d) que se aplica sobre essas versões sem exigir upgrade completo; distribuições lançaram backports próprios (Debian stretch: exim4 4.89-2+deb9u4 via DSA-4456-1; Gentoo via GLSA 201906-01; openSUSE via advisório dedicado).

Como paliativo quando não é possível aplicar o patch imediatamente, recompilar o Exim com a flag DISABLE_EVENT definida remove o bloco de código vulnerável — mas isso desativa o mecanismo de eventos do Exim inteiro e exige rebuild, não é uma configuração de runtime. Confiar apenas na ACL padrão "verify = recipient" não é mitigação suficiente: ela não protege contra o vetor local (qualquer usuário do sistema já explora o bug) nem contra as configurações não-padrão citadas acima, que são comuns em ambientes de hosting e relay.

Cómo detectar

Procurar em logs do Exim (mainlog, reject log, panic log) por endereços de destinatário (RCPT TO ou campo From/To de mensagens) contendo a string "${run{" ou variações de ofuscação do item de expansão "run". Conexões SMTP anormalmente longas (da ordem de dias, com tráfego mínimo intermitente) são indício do vetor remoto descrito pela Qualys para a configuração padrão. Processos filhos inesperados gerados pelo daemon exim, executando como root e sem corresponder a binários esperados de entrega de e-mail, são o sinal mais direto de exploração bem-sucedida — mas não há um indicador de rede único e confiável, já que o payload viaja dentro de um endereço de e-mail e pode ser trivialmente ofuscado.

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.
A flaw was found in Exim versions 4.87 to 4.91 (inclusive). Improper validation of recipient address in deliver_message() function in /src/deliver.c may lead to remote command execution.
CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H
Productos afectados
exim · exim
PoCs públicas encontradas39 VexDay Proof
exploitdbVexDay Proofwww.exploit-db.com/exploits/47307exploitdbVexDay Proofwww.exploit-db.com/exploits/46996exploitdbwww.exploit-db.com/exploits/46974no verificadogithubgithub.com/bananaphones/exim-rce-quickfix22githubgithub.com/Diefunction/CVE-2019-1014919githubgithub.com/cowbe0x004/eximrce-CVE-2019-1014914githubgithub.com/MNEMO-CERT/PoC--CVE-2019-10149_Exim14githubgithub.com/AzizMea/CVE-2019-10149-privilege-escalation9githubgithub.com/darsigovrustam/CVE-2019-101495githubgithub.com/Chris-dev1/exim.exp4githubgithub.com/cloudflare/exim-cve-2019-10149-data3githubgithub.com/Brets0150/StickyExim3githubgithub.com/aishee/CVE-2019-10149-quick1githubgithub.com/Stick-U235/CVE-2019-10149-Exploit1githubgithub.com/uyerr/PoC_CVE-2019-10149--rce1githubgithub.com/rahmadsandy/EXIM-4.87-CVE-2019-101490githubgithub.com/VoyagerOnne/Exim-CVE-2019-101490githubgithub.com/CybersRMUTL/CVE-2019-10149-Exim4-RCE0githubgithub.com/Ambrella-Security/CVE-2019-101490githubgithub.com/Dilshan-Eranda/CVE-2019-101490githubgithub.com/hyim0810/CVE-2019-101490githubgithub.com/qlusec/CVE-2019-101490vulncheckvulncheck.com/xdb/ca73aedc1e14no verificadovulncheckvulncheck.com/xdb/eeb36c51b81dno verificadovulncheckvulncheck.com/xdb/16dc2d42770cno verificadovulncheckvulncheck.com/xdb/12238eca37ffno verificadovulncheckvulncheck.com/xdb/2e73af25d4a9no verificadovulncheckvulncheck.com/xdb/0e9dcf2ac58cno verificadovulncheckvulncheck.com/xdb/ee883571c18eno verificadovulncheckvulncheck.com/xdb/bb70225786a3no verificadovulncheckvulncheck.com/xdb/70326cca6d27no verificadovulncheckvulncheck.com/xdb/d40c82e4a679no verificadocve_referencepacketstormsecurity.com/files/153218/Exim-4.9.1-Remote-Command-Execution.htmlno verificadocve_referencepacketstormsecurity.com/files/153312/Exim-4.91-Local-Privilege-Escalation.htmlno verificadocve_referencepacketstormsecurity.com/files/154198/Exim-4.91-Local-Privilege-Escalation.htmlno verificadovulncheckvulncheck.com/xdb/1a1f3a4ff3c8no verificadovulncheckvulncheck.com/xdb/20346f31ab54no verificadovulncheckvulncheck.com/xdb/ca604e67a881no verificadovulncheckvulncheck.com/xdb/49992cce5b1cno verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.