Uma vulnerabilidade crítica no Exim permite a execução de código no servidor com permissões de root.

No servidor de e-mail Exim foi identificada crítica uma vulnerabilidade (CVE-2019-10149), que pode levar à execução remota de código no servidor com permissões de root ao processar uma solicitação formatada de maneira específica. A possibilidade de exploração do problema foi observada nas versões de 4.87 a 4.91, inclusive, ou em compilações com a opção EXPERIMENTAL_EVENT.

Na configuração padrão, um ataque pode ser realizado sem dificuldades adicionais por um usuário local, pois utiliza o ACL "verify = recipient", que realiza verificações adicionais para endereços externos. A realização de um ataque remoto é possível ao mudar as configurações, por exemplo, ao atuar como um MX secundário para outro domínio, remover o ACL "verify = recipient" ou fazer alterações específicas no local_part_suffix. Um ataque remoto também é viável se o invasor conseguir manter a conexão com o servidor aberta durante 7 dias (por exemplo, enviando um byte por minuto para contornar a interrupção por tempo limite). Não se pode descartar que existam vetores de ataque mais simples para a exploração remota do problema.

A vulnerabilidade é causada pela verificação incorreta do endereço do destinatário na função deliver_message(), definida no arquivo /src/deliver.c. Através da manipulação da formatação do endereço, o atacante pode conseguir a substituição de seus dados nos argumentos do comando chamado através da função execv() com permissões de root. Não é necessário empregar técnicas complexas utilizadas em estouros de buffer ou corrupção de memória, basta simplesmente a substituição de caracteres.

O problema está relacionado ao uso da construção para a transformação de endereços:

deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", new->address));
deliver_domain = expand_string(
string_sprintf("${domain:%s}", new->address));

A função expand_string() é um combinador excessivamente complexo, incluindo o reconhecimento do comando "${run{comando argumentos}", que leva à execução de um processador externo. Assim, para um ataque no contexto de uma sessão SMTP, basta que um usuário local envie um comando da forma 'RCPT TO "username+${run{…}}@localhost"', onde localhost é um dos hosts da lista local_domains, e username é o nome de um usuário local existente.

Se o servidor estiver funcionando como um relé de e-mail, basta enviar o comando ‘RCPT TO «${run{…}}@relaydomain.com»‘, onde relaydomain.com é um dos hosts listados na seção de configurações relay_to_domains. Como, por padrão, o exim não aplica o modo de queda de privilégios (deliver_drop_privilege = false), os comandos passados através de «${run{…}}» serão executados com privilégios de root.

É notável que a vulnerabilidade foi no lançamento na versão 4.92 lançada em fevereiro, sem chamar a atenção para o fato de que a correção poderia causar problemas de segurança. Não há motivos para acreditar que houve uma ocultação consciente da vulnerabilidade pelos desenvolvedores do Exim, uma vez que o problema foi resolvido durante a correção de uma falha que ocorria ao transmitir endereços incorretos, e a vulnerabilidade foi identificada pela empresa Qualys durante uma auditoria das mudanças no Exim.

A correção para versões anteriores, que continuam a ser utilizadas nas distribuições, está disponível apenas na forma de patch. Atualizações corretivas para ramos anteriores com a correção do problema estão programadas para 11 de junho. Pacotes de atualização foram preparados para Debian, Ubuntu, Arch Linux. EPEL para RHEL/CentOS e Fedora fornecem a versão 4.92, na qual o problema não se manifesta. O RHEL e o CentOS lidam com não estão afetados, uma vez que o Exim não faz parte de seu repositório padrão de pacotes.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster