Vulnerabilidade crítica en Exim que permite executar código no servidor con privilexios de root

No servidor de correo Exim identificado crítico vulnerabilidade (CVE-2019-10149), o que pode levar á execución remota de código no servidor con dereitos de root ao procesar unha solicitude especialmente elaborada. A posibilidade de explotación do problema notouse nas versións da 4.87 á 4.91 inclusive ou ao construír coa opción EXPERIMENTAL_EVENT.

Na configuración predeterminada, o ataque pódese levar a cabo sen complicacións innecesarias por parte dun usuario local, xa que se aplica a ACL "verify = recipient", que realiza comprobacións adicionais para enderezos externos. Pode producirse un ataque remoto cando se cambian a configuración, como actuar como MX secundario para outro dominio, eliminar a ACL "verify=recipient" ou certos cambios no local_part_suffix). Tamén é posible un ataque remoto se o atacante é capaz de manter aberta a conexión co servidor durante 7 días (por exemplo, enviando un byte por minuto para evitar un tempo de espera). Ao mesmo tempo, é posible que existan vectores de ataque máis sinxelos para a explotación remota do problema.

A vulnerabilidade é causada pola verificación incorrecta do enderezo do destinatario na función deliver_message() definida no ficheiro /src/deliver.c. Ao manipular o formato do enderezo, un atacante pode conseguir a substitución dos seus datos polos argumentos dun comando chamado a través da función execv() con dereitos de root. O funcionamento non require o uso de técnicas complexas utilizadas para desbordamentos de búfer ou corrupción da memoria; é suficiente a simple substitución de caracteres.

O problema está relacionado co uso do constructo para a conversión de enderezos:

delivery_localpart = expand_string(
string_sprintf("${parte_local:%s}", novo->enderezo));
entrega_dominio = expand_string(
string_sprintf("${dominio:%s}", novo->enderezo));

A función expand_string() é un combinador demasiado complicado, que inclúe o recoñecemento do comando "${run{command arguments}", que leva ao lanzamento dun controlador externo. Así, para atacar dentro dunha sesión SMTP, un usuario local só precisa enviar un comando como 'RCPT TO “nome de usuario+${executar{...}}@localhost”', onde localhost é un dos hosts da lista de dominios_locales, e nome de usuario é o nome dun usuario local existente.

Se o servidor funciona como retransmisión de correo, abonda con enviar de forma remota o comando 'RCPT TO "${run{...}}@relaydomain.com"', onde relaydomain.com é un dos hosts que aparecen na lista relay_to_domains. sección de configuración. Dado que Exim non elimina o modo de privilexios por defecto (deliver_drop_privilege = false), os comandos pasados ​​a través de "${run{...}}" executaranse como root.

Cabe destacar que a vulnerabilidade foi eliminado na versión 4.92 publicada en febreiro, sen enfatizar que a corrección pode provocar problemas de seguridade. Non hai razóns para crer que houbo unha ocultación deliberada da vulnerabilidade por parte dos desenvolvedores de Exim, xa que o problema foi solucionado durante correccións fallo que ocorre cando se transmiten enderezos incorrectos e Qualys identificou a vulnerabilidade durante unha auditoría de cambios en Exim.

Actualmente só está dispoñible unha corrección para versións anteriores que seguen usándose nas distribucións parche. Para o 11 de xuño están programadas as versións correctivas das sucursais anteriores para solucionar o problema. As actualizacións de paquetes están listas para Debian, Ubuntu, openSUSE. Arch Linux и Fedora Fornecen a versión 4.92, na que non aparece o problema. Problema RHEL e CentOS non susceptibles, xa que Exim non está incluído no seu repositorio de paquetes normal.

Fonte: opennet.ru

Engadir un comentario