CVE-2019-10149
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
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
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.