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