Vulnerabilidad explotable de forma remota en el servidor de correo qmail

Investigadores de seguridad de Qualys han mostrado oportunidad Operativo vulnerabilidades en el servidor de correo qmail, famoso en 2005 (CVE-2005-1513), pero permaneció sin parchear porque el autor de qmail argumentó que no era realista crear un exploit funcional que pudiera usarse para atacar sistemas en la configuración predeterminada. Qualys pudo preparar un exploit que refuta esta suposición y permite iniciar la ejecución remota de código en el servidor enviando un mensaje especialmente diseñado.

El problema se debe a un desbordamiento de enteros en la función stralloc_readyplus(), que puede ocurrir al procesar un mensaje muy grande. El funcionamiento requería un sistema de 64 bits con más de 4 GB de memoria virtual. Cuando la vulnerabilidad se analizó originalmente en 2005, Daniel J. Bernstein argumentó que la suposición en el código de que el tamaño de la matriz asignada siempre está dentro del valor de 32 bits se basa en el hecho de que nadie proporciona gigabytes de memoria a cada proceso. Durante los últimos 15 años, los sistemas de 64 bits en servidores han reemplazado a los sistemas de 32 bits y la cantidad de memoria suministrada y el ancho de banda de la red han aumentado dramáticamente.

Los mantenedores del paquete qmail tuvieron en cuenta la nota de Bernstein y limitaron la memoria disponible al iniciar el proceso qmail-smtpd (por ejemplo, en Debian 10 el límite está establecido en 7 MB). Pero los ingenieros de Qualys descubrieron que esto no es suficiente y, además de qmail-smtpd, se puede realizar un ataque remoto al proceso qmail-local, que permaneció sin restricciones en todos los paquetes probados. Como prueba, se preparó un prototipo de exploit adecuado para atacar el paquete Debian con qmail en la configuración predeterminada.
Para organizar la ejecución remota de código durante un ataque, el servidor requiere 4 GB de espacio libre en disco y 8 GB de RAM.
El exploit le permite ejecutar cualquier comando de shell con los derechos de cualquier usuario del sistema, excepto los usuarios root y del sistema que no tienen su propio subdirectorio en el directorio "/home" (el proceso qmail-local se inicia con los derechos del usuario local a quien se realiza la entrega).

El ataque se lleva a cabo
mediante el envío de un mensaje de correo muy grande, que incluye varias líneas de encabezado, y que mide aproximadamente 4 GB y 576 MB. Procesar dicha cadena en qmail-local da como resultado un desbordamiento de enteros al intentar entregar un mensaje al usuario local. Un desbordamiento de números enteros provoca entonces un desbordamiento del búfer al copiar datos y la posibilidad de sobrescribir páginas de memoria con código libc. Al manipular el diseño de los datos transmitidos, también es posible reescribir la dirección de la función “open()”, reemplazándola con la dirección de la función “system()”.

A continuación, en el proceso de llamar a qmesearch() en qmail-local, el archivo “.qmail-extension” se abre a través de la función open(), lo que conduce a la ejecución real de la función.
sistema(".qmail-extensión"). Pero dado que la parte de "extensión" del archivo se genera en función de la dirección del destinatario (por ejemplo, "extensión-usuariolocal@dominiolocal"), los atacantes pueden organizar que el comando se envíe para ejecutarse especificando el usuario "usuariolocal-;comando ;@dominiolocal” como destinatario del mensaje.

Durante el análisis del código, también se identificaron dos vulnerabilidades en el parche adicional qmail-verify, que forma parte del paquete para Debian. Primera vulnerabilidad (CVE-2020-3811) le permite omitir la verificación de la dirección de correo electrónico, y el segundo (CVE-2020-3812) conduce a la fuga de información local. En particular, la primera vulnerabilidad permite eludir la verificación de la exactitud de la dirección utilizada en el exploit para enviar un comando (la verificación no funciona para direcciones sin dominio, como “localuser-;command;”). La segunda vulnerabilidad se puede utilizar para comprobar la presencia de archivos y directorios en el sistema, incluidos aquellos a los que sólo puede acceder el root (qmail-verify se ejecuta con derechos de root), mediante una llamada directa al controlador local.

Para solucionar el problema, Bernstein recomendó ejecutar procesos de qmail con un límite total de memoria disponible (“softlimit -m12345678”), en cuyo caso el problema se bloquea. Como método alternativo de protección, también se menciona limitar el tamaño máximo del mensaje procesado a través del archivo “control/databytes” (por defecto no se crea con la configuración predeterminada, qmail sigue siendo vulnerable). Además, "control/databytes" no protege contra ataques locales de los usuarios del sistema, ya que qmail-smtpd sólo tiene en cuenta el límite.

El problema afecta al paquete. netqmail, incluido en los repositorios de Debian. Se ha preparado un conjunto de parches para este paquete, eliminando tanto las vulnerabilidades antiguas de 2005 (agregando límites de memoria al código de función alloc()) como nuevos problemas en qmail-verify. Por separado preparado Versión actualizada del parche qmail-verify. Desarrolladores sucursales notqmail prepararon sus propios parches para bloquear problemas antiguos y también comenzaron a trabajar para eliminar todos los posibles desbordamientos de enteros en el código.

Fuente: opennet.ru

Añadir un comentario