Vulnerabilidad crítica en Exim que permite ejecutar código en el servidor con privilegios de root

En el servidor de correo Exim identificado crítico vulnerabilidad (CVE-2019-10149), lo que puede provocar la ejecución remota de código en el servidor con derechos de root al procesar una solicitud especialmente diseñada. La posibilidad de explotar el problema se observó en las versiones de 4.87 a 4.91 inclusive o al compilar con la opción EXPERIMENTAL_EVENT.

En la configuración predeterminada, el ataque puede ser realizado sin complicaciones innecesarias por un usuario local, ya que se aplica la ACL “verificar = destinatario”, que realiza comprobaciones adicionales para direcciones externas. Puede ocurrir un ataque remoto cuando se cambian las configuraciones, como actuar como un MX secundario para otro dominio, eliminar la ACL "verify=recipient" o ciertos cambios en local_part_suffix). Un ataque remoto también es posible si el atacante puede mantener abierta la conexión al servidor durante 7 días (por ejemplo, enviando un byte por minuto para evitar un tiempo de espera). Al mismo tiempo, es posible que existan vectores de ataque más simples para la explotación remota del problema.

La vulnerabilidad se debe a una verificación incorrecta de la dirección del destinatario en la función delivery_message() definida en el archivo /src/deliver.c. Al manipular el formato de la dirección, un atacante puede lograr la sustitución de sus datos en los argumentos de un comando llamado a través de la función execv() con derechos de root. La operación no requiere el uso de técnicas complejas utilizadas para desbordamientos de búfer o corrupción de memoria; la simple sustitución de caracteres es suficiente.

El problema está relacionado con el uso de la construcción para la conversión de direcciones:

entregar_localpart = expandir_cadena(
string_sprintf("${local_part:%s}", nueva->dirección));
entregar_dominio = expandir_cadena(
string_sprintf("${dominio:%s}", nueva->dirección));

La función expand_string() es un combinador demasiado complicado, que incluye el reconocimiento del comando "${run{command arguments}", lo que conduce al lanzamiento de un controlador externo. Por lo tanto, para atacar dentro de una sesión SMTP, un usuario local solo necesita enviar un comando como 'RCPT TO “username+${run{...}}@localhost”', donde localhost es uno de los hosts de la lista local_domains, y nombre de usuario es el nombre de un usuario local existente.

Si el servidor funciona como retransmisión de correo, basta con enviar de forma remota el comando 'RCPT TO "${run{...}}@relaydomain.com"', donde retransmisióndomain.com es uno de los hosts enumerados en retransmisión_a_dominios sección de configuración. Dado que Exim no utiliza de forma predeterminada el modo de eliminación de privilegios (deliver_drop_privilege = false), los comandos pasados ​​a través de "${run{...}}" se ejecutarán como root.

Es de destacar que la vulnerabilidad fue eliminado en la versión 4.92 lanzada en febrero, sin enfatizar que la solución podría provocar problemas de seguridad. No hay razón para creer que hubo una ocultación deliberada de la vulnerabilidad por parte de los desarrolladores de Exim, ya que el problema se solucionó durante correcciones falla que ocurre cuando se transmiten direcciones incorrectas, y la vulnerabilidad fue identificada por Qualys durante una auditoría de cambios en Exim.

Actualmente, una solución para versiones anteriores que se siguen utilizando en distribuciones solo está disponible como parche. Los lanzamientos correctivos para ramas anteriores para solucionar el problema están programados para el 11 de junio. Las actualizaciones de paquetes están listas para Debian, Ubuntu, openSUSE. Arch Linux и Fedora Suministran la versión 4.92, en la que no aparece el problema. Problema de RHEL y CentOS no susceptible, ya que Exim no está incluido en su repositorio de paquetes habitual.

Fuente: opennet.ru

Añadir un comentario