Cercetători de securitate de la Qualys
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 (
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
Sursa: opennet.ru