Cercetătorii de securitate de la compania Qualys posibilitatea vulnerabilitățile din serverul de email qmail, încă din 2005 (CVE-2005-1513), dar a rămas nerezolvată, deoarece autorul qmail a susținut că este nerealist să se creeze un exploit funcțional care ar putea fi folosit pentru a ataca sistemele în configurația implicită. La Qualys, s-a reușit pregătirea unui exploit care contrazice această presupunere și permite inițierea executării de cod de la distanță pe server prin trimiterea unui mesaj format special.
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. Pentru exploatare era necesar un sistem pe 64 de biți cu mai mult de 4 GB de memorie virtuală. La analiza inițială a vulnerabilității în 2005, Daniel Bernstein a afirmat că presupunerea din cod că dimensiunea array-ului alocat se încadrează întotdeauna într-o valoare pe 32 de biți se bazează pe ideea că nimeni nu oferă gigabytes de memorie fiecărui proces. În ultimii 15 ani, sistemele pe 64 de biți pe servere au înlocuit sistemele pe 32 de biți, volumul de memorie livrat a crescut radical și capacitatea de bandă a rețelelor.
Pachetele însoțitoare ale qmail au ținut cont de observația lui Bernstein și, la inițierea procesului qmail-smtpd, au restricționat memoria disponibilă (de exemplu, în Debian 10 este setat un limită de 7MB). Însă inginerii de la Qualys au descoperit că aceasta nu este suficient și, pe lângă qmail-smtpd, un atac de la distanță poate fi efectuat și asupra procesului qmail-local, care în toate pachetele verificate a rămas fără restricții. Ca dovadă, a fost pregătit un prototip de exploit potrivit pentru atacul asupra pachetului qmail livrat în Debian în configurația implicită.
Pentru a organiza executarea de cod de la distanță în timpul atacului, este necesar ca pe server să existe 4GB de spațiu liber pe disc și 8GB de RAM.
Exploitul permite executarea oricăror comenzi shell cu drepturile oricărui utilizator din sistem, cu excepția root și a utilizatorilor de sistem care nu au un subdirector în directorul „/home” (procesul qmail-local se inițiază cu drepturile utilizatorului local, căruia îi este livrat mesajul).
Atacul se desfășoară
prin expedierea unui mesaj poștal foarte mare, care include mai multe linii în antet, cu o dimensiune de aproximativ 4GB și 576MB. Procesarea unei astfel de linii în qmail-local duce la o depășire de capacitate întreagă în timpul încercării de livrare a mesajului către un utilizator local. Depășirea de capacitate duce, de asemenea, la o depășire a bufferului în timpul copierii datelor și la posibilitatea de a scrie din nou paginile de memorie cu codul libc. Prin manipularea configurării datelor transmise, se poate rescrie, de exemplu, adresa funcției „open()”, înlocuind-o cu adresa funcției „system()”.
În continuare, în timpul apelării qmesearch() în qmail-local, se deschide fișierul „.qmail-extension” prin funcția open(), ceea ce duce la executarea efectivă a funcției
system(«.qmail-extension»). Dar deoarece o parte a fișierului „extension” se formează pe baza adresei destinatului (de exemplu, „localuser-extension@localdomain”), atacatorii pot organiza transmiterea comenzii de executat, specificând utilizatorul „localuser-;command;@localdomain” ca destinatar al mesajului.
În analiza codului au fost identificate de asemenea două vulnerabilități în patchul suplimentar qmail-verify, care face parte din pachetul pentru Debian. Prima vulnerabilitate () permite ocolirea verificării adresei de email, iar a doua () duce la scurgerea informațiilor locale. În special, prima vulnerabilitate permite ocolirea verificării corectitudinii adresei folosite în exploit pentru a transmite comanda (verificarea nu funcționează pentru adrese fără domeniu, cum ar fi „localuser-;command;”). A doua vulnerabilitate poate fi folosită pentru a verifica existența fișierelor și directoarelor în sistem, inclusiv cele disponibile doar pentru root (qmail-verify este executat cu drepturi de root), prin acces direct la handler-ul local.
Pentru a ocoli problema, Bernstein a recomandat rularea proceselor qmail cu stabilirea unei limite generale pentru memoria disponibilă („softlimit -m12345678”), iar în acest caz problema este blocată. Ca alternativă de protecție, se menționează de asemenea limitarea dimensiunii maxime a mesajului procesat prin fișierul „control/databytes” (în mod implicit, acest fișier nu este creat la 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 în qmail-smtpd.
Problema afectează pachetul , inclus în repositoarele Debian. Pentru acest pachet a fost pregătit un set de patch-uri care elimină atât vulnerabilitățile vechi din 2005 (prin adăugarea în cod a funcției alloc() cu limite stricte de memorie), cât și probleme recente în qmail-verify. Separat versiunea actualizată a patch-ului qmail-verify. Dezvoltatorii au pregătit patch-urile lor pentru a bloca problemele vechi și au început munca pentru a elimina toate posibilele depășiri de capacitate în cod.
Sursa: opennet.ro
