Vulnerabilidade explotable remotamente no servidor de correo qmail

Investigadores de seguridade de Qualys amosou oportunidade explotación vulnerabilidades no servidor de correo qmail, famoso alá en 2005 (CVE-2005-1513), pero quedou sen parchear porque o autor de qmail argumentou que non era realista crear un exploit de traballo que puidese usarse para atacar sistemas na configuración predeterminada. Qualys foi capaz de preparar un exploit que refuta esta suposición e permite iniciar a execución remota de código no servidor enviando unha mensaxe especialmente deseñada.

O problema é causado por un desbordamento de números enteiros na función stralloc_readyplus(), que pode ocorrer ao procesar unha mensaxe moi grande. O funcionamento requiriu un sistema de 64 bits con máis de 4 GB de memoria virtual. Cando a vulnerabilidade foi analizada orixinalmente en 2005, Daniel J. Bernstein argumentou que a suposición no código de que o tamaño da matriz asignada está sempre dentro do valor de 32 bits baséase no feito de que ninguén proporciona gigabytes de memoria a cada proceso. Nos últimos 15 anos, os sistemas de 64 bits en servidores substituíron os sistemas de 32 bits, e a cantidade de memoria subministrada e o ancho de banda da rede aumentaron drasticamente.

Os mantedores do paquete qmail tiveron en conta a nota de Bernstein e limitaron a memoria dispoñible ao iniciar o proceso qmail-smtpd (por exemplo, en Debian 10 o límite está establecido en 7 MB). Pero os enxeñeiros de Qualys descubriron que isto non é suficiente e, ademais de qmail-smtpd, pódese realizar un ataque remoto ao proceso qmail-local, que permaneceu sen restricións en todos os paquetes probados. Como proba, preparouse un prototipo de exploit que era axeitado para atacar o paquete Debian con qmail na configuración predeterminada.
Para organizar a execución remota de código durante un ataque, o servidor require 4 GB de espazo libre no disco e 8 GB de RAM.
O exploit permítelle executar calquera comando de shell cos dereitos de calquera usuario do sistema, excepto os usuarios root e do sistema que non teñen o seu propio subdirectorio no directorio "/home" (o proceso qmail-local lánzase cos dereitos). do usuario local ao que se realiza a entrega).

O ataque lévase a cabo
mediante o envío dunha mensaxe de correo moi grande, incluíndo varias liñas de cabeceira, que mide aproximadamente 4 GB e 576 MB. O procesamento desta cadea en qmail-local provoca un desbordamento de enteiros ao tentar entregar unha mensaxe ao usuario local. Un desbordamento de número enteiro leva a un desbordamento do búfer ao copiar datos e a posibilidade de sobrescribir páxinas de memoria co código libc. Ao manipular a disposición dos datos transmitidos, tamén é posible reescribir o enderezo da función “open()”, substituíndoo polo enderezo da función “system()”.

A continuación, no proceso de chamar a qmesearch() en qmail-local, ábrese o ficheiro ".qmail-extension" a través da función open(), o que leva á execución real da función.
system(".qmail-extension"). Pero dado que a parte "extensión" do ficheiro xérase en función do enderezo do destinatario (por exemplo, "localuser-extension@localdomain"), os atacantes poden organizar que o comando se envíe especificando o usuario "localuser-;command". ;@localdomain” como destinatario da mensaxe.

Durante a análise do código, tamén se identificaron dúas vulnerabilidades no parche adicional qmail-verify, que forma parte do paquete para Debian. Primeira vulnerabilidade (CVE-2020-3811) permítelle ignorar a verificación do enderezo de correo electrónico e o segundo (CVE-2020-3812) leva á fuga de información local. En particular, a primeira vulnerabilidade permítelle ignorar a verificación da corrección do enderezo utilizado no exploit para enviar un comando (a verificación non funciona para enderezos sen dominio, como "localuser-;command;"). A segunda vulnerabilidade pódese utilizar para comprobar a presenza de ficheiros e directorios no sistema, incluídos os accesibles só para root (execucións de qmail-verify con dereitos de root), mediante unha chamada directa ao controlador local.

Para solucionar o problema, Bernstein recomendou executar procesos de qmail cun límite total de memoria dispoñible ("softlimit -m12345678"), caso en que o problema está bloqueado. Como método alternativo de protección, tamén se menciona a limitación do tamaño máximo da mensaxe procesada a través do ficheiro "control/databytes" (por defecto non se crea coa configuración predeterminada qmail segue sendo vulnerable). Ademais, "control/databytes" non protexe contra ataques locais dos usuarios do sistema, xa que o límite só o ten en conta qmail-smtpd.

O problema afecta ao paquete netqmail, incluído nos repositorios de Debian. Preparouse un conxunto de parches para este paquete, eliminando tanto as vulnerabilidades antigas de 2005 (engadindo límites de memoria dura ao código da función alloc()) como novos problemas en qmail-verify. Por separado preparado versión actualizada do parche qmail-verify. Desenvolvedores ramas notqmail prepararon os seus propios parches para bloquear problemas antigos e tamén comezaron a traballar para eliminar todos os posibles desbordamentos de números enteiros no código.

Fonte: opennet.ru

Engadir un comentario