← voltar
CVE-2019-10149criticalsob ataqueCWE-78

CVE-2019-10149

100Vexday Risk Score

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

ssvc Actcvss 9epss 100%
da publicação à arma0 dias
Publicada no NVD5 de jun.
1ª PoC12 de jul.
metasploit5 de jun.
CISA KEV+950d
probabilidade de exploração
100%top 1% das CVEs
exploração observada
simCISA + VulnCheck
39 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-07-10

Apply updates per vendor instructions.

Resumo

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

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

Como é explorada

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.

Versões

Afetadas
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.
Corrigidas em
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.

Como se proteger

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.

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

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.
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
Produtos afetados
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/46974não 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/ca73aedc1e14não verificadovulncheckvulncheck.com/xdb/eeb36c51b81dnão verificadovulncheckvulncheck.com/xdb/16dc2d42770cnão verificadovulncheckvulncheck.com/xdb/12238eca37ffnão verificadovulncheckvulncheck.com/xdb/2e73af25d4a9não verificadovulncheckvulncheck.com/xdb/0e9dcf2ac58cnão verificadovulncheckvulncheck.com/xdb/ee883571c18enão verificadovulncheckvulncheck.com/xdb/bb70225786a3não verificadovulncheckvulncheck.com/xdb/70326cca6d27não verificadovulncheckvulncheck.com/xdb/d40c82e4a679não verificadocve_referencepacketstormsecurity.com/files/153218/Exim-4.9.1-Remote-Command-Execution.htmlnão verificadocve_referencepacketstormsecurity.com/files/153312/Exim-4.91-Local-Privilege-Escalation.htmlnão verificadocve_referencepacketstormsecurity.com/files/154198/Exim-4.91-Local-Privilege-Escalation.htmlnão verificadovulncheckvulncheck.com/xdb/1a1f3a4ff3c8não verificadovulncheckvulncheck.com/xdb/20346f31ab54não verificadovulncheckvulncheck.com/xdb/ca604e67a881não verificadovulncheckvulncheck.com/xdb/49992cce5b1cnão verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.