Vulnerabilidade crítica no Exim que permite que código seja executado no servidor com privilégios de root

No servidor de correio Exim identificado crítico vulnerabilidade (CVE-2019-10149), o que pode levar à execução remota de código no servidor com direitos de root ao processar uma solicitação especialmente criada. A possibilidade de exploração do problema foi notada nas versões 4.87 a 4.91 inclusive ou na construção com a opção EXPERIMENTAL_EVENT.

Na configuração padrão, o ataque pode ser realizado sem complicações desnecessárias por um usuário local, uma vez que é aplicada a ACL "verify = destinatário", que realiza verificações adicionais de endereços externos. Um ataque remoto pode ocorrer quando as configurações são alteradas, como atuar como um MX secundário para outro domínio, remover a ACL "verify=recipient" ou certas alterações no local_part_suffix). Um ataque remoto também é possível se o invasor conseguir manter a conexão com o servidor aberta por 7 dias (por exemplo, enviando um byte por minuto para contornar um tempo limite). Ao mesmo tempo, é possível que existam vetores de ataque mais simples para exploração remota do problema.

A vulnerabilidade é causada pela verificação incorreta do endereço do destinatário na função delivery_message() definida no arquivo /src/deliver.c. Ao manipular a formatação do endereço, um invasor pode conseguir a substituição de seus dados nos argumentos de um comando chamado através da função execv() com direitos de root. A operação não requer o uso de técnicas complexas usadas para estouros de buffer ou corrupção de memória; a simples substituição de caracteres é suficiente.

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

entregar_localpart = expand_string(
string_sprintf("${local_part:%s}", novo->endereço));
entregar_domínio = expand_string(
string_sprintf("${domínio:%s}", novo->endereço));

A função expand_string() é um combinador muito complicado, incluindo o reconhecimento do comando “${run{command argument}”, que leva ao lançamento de um manipulador externo. Assim, para atacar dentro de uma sessão SMTP, um usuário local só precisa enviar um comando como 'RCPT TO “username+${run{...}}@localhost”', onde localhost é um dos hosts da lista local_domains, e nome de usuário é o nome de um usuário local existente.

Se o servidor funcionar como retransmissor de correio, basta enviar remotamente o comando 'RCPT TO "${run{...}}@relaydomain.com"', onde relaydomain.com é um dos hosts listados no arquivo relay_to_domains seção de configurações. Como o Exim não tem como padrão o modo de eliminação de privilégios (deliver_drop_privilege = false), os comandos passados ​​via "${run{...}}" serão executados como root.

Vale ressaltar que a vulnerabilidade foi eliminado na versão 4.92 lançada em fevereiro, sem enfatizar que a correção pode levar a problemas de segurança. Não há razão para acreditar que tenha havido uma ocultação deliberada da vulnerabilidade por parte dos desenvolvedores do Exim, uma vez que o problema foi corrigido durante Conserta falha que ocorre quando endereços incorretos são transmitidos, e a vulnerabilidade foi identificada pela Qualys durante auditoria de mudanças no Exim.

Uma correção para versões anteriores que continuam a ser usadas em distribuições está atualmente disponível apenas como correção. Lançamentos corretivos de filiais anteriores para corrigir o problema estão agendados para 11 de junho. As atualizações do pacote estão prontas para Debian, Ubuntu, openSUSE. Arch Linux и Fedora Eles fornecem a versão 4.92, na qual o problema não aparece. Problema RHEL e CentOS não suscetível, já que o Exim não está incluído em seu repositório de pacotes regular.

Fonte: opennet.ru

Adicionar um comentário