Investigadores de seguridad de Qualys
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 (
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.
Fuente: opennet.ru