← back
CVE-2019-10149criticalunder attackCWE-78

CVE-2019-10149

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 9epss 100%
from disclosure to weapon0 days
Published on NVDJun 5
1st PoCJul 12
metasploitJun 5
CISA KEV+950d
exploitation probability
100%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
39 public exploit(s)
Action required by CISAfederal deadline: 2022-07-10

Apply updates per vendor instructions.

Summary

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

Technical detail

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.

How it’s exploited

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.

Versions

Affected
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.
Fixed in
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.

How to protect

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.

How to detect

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.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
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
Affected products
exim · exim
public PoCs found39 VexDay Proof
exploitdbVexDay Proofwww.exploit-db.com/exploits/46996exploitdbVexDay Proofwww.exploit-db.com/exploits/47307exploitdbwww.exploit-db.com/exploits/46974unverifiedgithubgithub.com/bananaphones/exim-rce-quickfix22githubgithub.com/Diefunction/CVE-2019-1014919githubgithub.com/MNEMO-CERT/PoC--CVE-2019-10149_Exim14githubgithub.com/cowbe0x004/eximrce-CVE-2019-1014914githubgithub.com/AzizMea/CVE-2019-10149-privilege-escalation9githubgithub.com/darsigovrustam/CVE-2019-101495githubgithub.com/Chris-dev1/exim.exp4githubgithub.com/Brets0150/StickyExim3githubgithub.com/cloudflare/exim-cve-2019-10149-data3githubgithub.com/aishee/CVE-2019-10149-quick1githubgithub.com/uyerr/PoC_CVE-2019-10149--rce1githubgithub.com/Stick-U235/CVE-2019-10149-Exploit1githubgithub.com/hyim0810/CVE-2019-101490githubgithub.com/rahmadsandy/EXIM-4.87-CVE-2019-101490githubgithub.com/qlusec/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-101490vulncheckvulncheck.com/xdb/ca604e67a881unverifiedvulncheckvulncheck.com/xdb/bb70225786a3unverifiedvulncheckvulncheck.com/xdb/49992cce5b1cunverifiedvulncheckvulncheck.com/xdb/ca73aedc1e14unverifiedvulncheckvulncheck.com/xdb/20346f31ab54unverifiedvulncheckvulncheck.com/xdb/ee883571c18eunverifiedvulncheckvulncheck.com/xdb/0e9dcf2ac58cunverifiedvulncheckvulncheck.com/xdb/2e73af25d4a9unverifiedvulncheckvulncheck.com/xdb/12238eca37ffunverifiedvulncheckvulncheck.com/xdb/eeb36c51b81dunverifiedvulncheckvulncheck.com/xdb/16dc2d42770cunverifiedcve_referencepacketstormsecurity.com/files/154198/Exim-4.91-Local-Privilege-Escalation.htmlunverifiedcve_referencepacketstormsecurity.com/files/153312/Exim-4.91-Local-Privilege-Escalation.htmlunverifiedcve_referencepacketstormsecurity.com/files/153218/Exim-4.9.1-Remote-Command-Execution.htmlunverifiedvulncheckvulncheck.com/xdb/d40c82e4a679unverifiedvulncheckvulncheck.com/xdb/70326cca6d27unverifiedvulncheckvulncheck.com/xdb/1a1f3a4ff3c8unverified
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.