Investigadors de seguretat de Qualys
El problema és causat per un desbordament d'enters a la funció stralloc_readyplus(), que es pot produir quan es processa un missatge molt gran. El funcionament requeria un sistema de 64 bits amb més de 4 GB de memòria virtual. Quan la vulnerabilitat es va analitzar originalment l'any 2005, Daniel J. Bernstein va argumentar que la suposició al codi que la mida de la matriu assignada està sempre dins del valor de 32 bits es basa en el fet que ningú proporciona gigabytes de memòria a cada procés. Durant els últims 15 anys, els sistemes de 64 bits dels servidors han substituït els sistemes de 32 bits, i la quantitat de memòria subministrada i l'amplada de banda de la xarxa han augmentat dràsticament.
Els responsables del paquet qmail van tenir en compte la nota de Bernstein i van limitar la memòria disponible en iniciar el procés qmail-smtpd (per exemple, a Debian 10 el límit s'estableix en 7 MB). Però els enginyers de Qualys van trobar que això no n'hi ha prou i, a més de qmail-smtpd, es pot dur a terme un atac remot al procés qmail-local, que va romandre sense restriccions en tots els paquets provats. Com a prova, es va preparar un prototip d'explotació adequat per atacar el paquet Debian amb qmail en la configuració per defecte.
Per organitzar l'execució de codi remota durant un atac, el servidor requereix 4 GB d'espai lliure en disc i 8 GB de RAM.
L'explotació us permet executar qualsevol ordre d'intèrpret d'ordres amb els drets de qualsevol usuari del sistema, excepte els usuaris root i del sistema que no tenen el seu propi subdirectori al directori "/home" (el procés qmail-local s'inicia amb els drets de l'usuari local a qui es realitza el lliurament).
L'atac es porta a terme
mitjançant l'enviament d'un missatge de correu molt gran, incloses diverses línies de capçalera, que mesura aproximadament 4 GB i 576 MB. El processament d'aquesta cadena a qmail-local provoca un desbordament d'enters quan s'intenta lliurar un missatge a l'usuari local. Un desbordament d'enteres provoca un desbordament de memòria intermèdia quan es copien dades i la possibilitat de sobreescriure les pàgines de memòria amb codi libc. Mitjançant la manipulació de la disposició de les dades transmeses, també és possible reescriure l'adreça de la funció “open()”, substituint-la per l'adreça de la funció “system()”.
A continuació, en el procés de crida a qmesearch() a qmail-local, s'obre el fitxer ".qmail-extension" mitjançant la funció open(), que condueix a l'execució real de la funció.
system(".qmail-extension"). Però com que la part "extensió" del fitxer es genera en funció de l'adreça del destinatari (per exemple, "localuser-extension@localdomain"), els atacants poden organitzar que l'ordre s'enviï especificant l'usuari "localuser-;command". ;@localdomain” com a destinatari del missatge.
Durant l'anàlisi del codi, també es van identificar dues vulnerabilitats al pedaç addicional qmail-verify, que forma part del paquet per a Debian. Primera vulnerabilitat (
Per solucionar el problema, Bernstein va recomanar executar processos de qmail amb un límit total de memòria disponible ("softlimit -m12345678"), en aquest cas el problema es bloqueja. Com a mètode alternatiu de protecció, també s'esmenta la limitació de la mida màxima del missatge processat mitjançant el fitxer "control/databytes" (per defecte no es crea amb la configuració predeterminada qmail segueix sent vulnerable). A més, "control/databytes" no protegeix contra atacs locals dels usuaris del sistema, ja que el límit només el té en compte qmail-smtpd.
El problema afecta el paquet
Font: opennet.ru