Vulnerabilitatea exploatabilă de la distanță în serverul de e-mail qmail

Cercetători de securitate de la Qualys a arătat oportunitate exploatare vulnerabilități în serverul de e-mail qmail, faimos în 2005 (CVE-2005-1513), dar a rămas nepatchat deoarece autorul qmail a susținut că nu era realist să se creeze un exploit care să poată fi folosit pentru a ataca sistemele în configurația implicită. Qualys a reușit să pregătească o exploatare care respinge această presupunere și permite să inițieze execuția codului de la distanță pe server, trimițând un mesaj special conceput.

Problema este cauzată de o depășire a numărului întreg în funcția stralloc_readyplus(), care poate apărea la procesarea unui mesaj foarte mare. Funcționarea a necesitat un sistem pe 64 de biți cu mai mult de 4 GB de memorie virtuală. Când vulnerabilitatea a fost analizată inițial în 2005, Daniel J. Bernstein a susținut că ipoteza din cod că dimensiunea matricei alocate este întotdeauna în valoarea de 32 de biți se bazează pe faptul că nimeni nu oferă gigaocteți de memorie fiecărui proces. În ultimii 15 ani, sistemele pe 64 de biți de pe servere au înlocuit sistemele pe 32 de biți, iar cantitatea de memorie furnizată și lățimea de bandă a rețelei au crescut dramatic.

Menținătorii pachetului qmail au luat în considerare nota lui Bernstein și au limitat memoria disponibilă la pornirea procesului qmail-smtpd (de exemplu, în Debian 10 limita este setată la 7MB). Dar inginerii de la Qualys au constatat că acest lucru nu este suficient și, pe lângă qmail-smtpd, poate fi efectuat un atac de la distanță asupra procesului qmail-local, care a rămas nerestricționat în toate pachetele testate. Ca dovadă, a fost pregătit un prototip de exploatare care era potrivit pentru a ataca pachetul Debian cu qmail în configurația implicită.
Pentru a organiza execuția codului de la distanță în timpul unui atac, serverul necesită 4 GB spațiu liber pe disc și 8 GB RAM.
Exploatarea vă permite să rulați orice comenzi shell cu drepturile oricărui utilizator din sistem, cu excepția utilizatorilor root și de sistem care nu au propriul subdirector în directorul „/home” (procesul qmail-local este lansat cu drepturile utilizatorului local căruia i se efectuează livrarea).

Atacul este efectuat
prin trimiterea unui mesaj e-mail foarte mare, inclusiv mai multe linii de antet, care măsoară aproximativ 4 GB și 576 MB. Procesarea unui astfel de șir în qmail-local are ca rezultat o depășire a numărului întreg atunci când încearcă să livreze un mesaj utilizatorului local. O depășire a numărului întreg duce apoi la o depășire a tamponului la copierea datelor și la posibilitatea de a suprascrie paginile de memorie cu cod libc. Prin manipularea aspectului datelor transmise, este posibilă și rescrierea adresei funcției „open()”, înlocuind-o cu adresa funcției „system()”.

Apoi, în procesul de apelare a qmesearch() în qmail-local, fișierul „.qmail-extension” este deschis prin funcția open(), ceea ce duce la execuția efectivă a funcției
system(".qmail-extension"). Dar, deoarece partea „extensie” a fișierului este generată pe baza adresei destinatarului (de exemplu, „localuser-extension@localdomain”), atacatorii pot aranja ca comanda să fie trimisă să ruleze prin specificarea utilizatorului „localuser-;command”. ;@localdomain” ca destinatar al mesajului.

În timpul analizei codului, au fost identificate și două vulnerabilități în corecția suplimentară qmail-verify, care face parte din pachetul pentru Debian. Prima vulnerabilitate (CVE-2020-3811) vă permite să ocoliți verificarea adresei de e-mail, iar al doilea (CVE-2020-3812) duce la scurgeri de informații locale. În special, prima vulnerabilitate vă permite să ocoliți verificarea corectitudinii adresei utilizate în exploit pentru a trimite o comandă (verificarea nu funcționează pentru adrese fără domeniu, cum ar fi „localuser-;command;”). A doua vulnerabilitate poate fi folosită pentru a verifica prezența fișierelor și directoarelor în sistem, inclusiv a celor accesibile doar root (qmail-verify rulează cu drepturi root), printr-un apel direct către handlerul local.

Pentru a rezolva problema, Bernstein a recomandat rularea proceselor qmail cu o limită totală de memorie disponibilă („softlimit -m12345678”), caz în care problema este blocată. Ca metodă alternativă de protecție, este menționată și limitarea dimensiunii maxime a mesajului procesat prin fișierul „control/databytes” (în mod implicit nu este creat cu setările implicite qmail rămâne vulnerabil). În plus, „control/databytes” nu protejează împotriva atacurilor locale din partea utilizatorilor sistemului, deoarece limita este luată în considerare doar de qmail-smtpd.

Problema afectează pachetul netqmail, inclus în depozitele Debian. Un set de patch-uri a fost pregătit pentru acest pachet, eliminând atât vulnerabilitățile vechi din 2005 (prin adăugarea unor limite de memorie la codul funcției alloc()), cât și noi probleme în qmail-verify. Separat pregătit versiunea actualizată a patch-ului qmail-verify. Dezvoltatori ramuri notqmail și-au pregătit propriile patch-uri pentru a bloca problemele vechi și, de asemenea, au început să lucreze pentru a elimina toate posibilele depășiri întregi din cod.

Sursa: opennet.ru

Adauga un comentariu