Vulnerabilitatea critică în Exim care permite executarea codului pe serverul cu privilegii root

În serverul de e-mail Exim identificat critic vulnerabilitate (CVE-2019-10149), care poate duce la execuția de cod de la distanță pe serverul cu drepturi root atunci când procesează o solicitare special concepută. Posibilitatea de exploatare a problemei a fost observată în versiunile de la 4.87 la 4.91 inclusiv sau la construirea cu opțiunea EXPERIMENTAL_EVENT.

În configurația implicită, atacul poate fi efectuat fără complicații inutile de către un utilizator local, deoarece se aplică ACL „verify = recipient”, care efectuează verificări suplimentare pentru adresele externe. Un atac de la distanță poate apărea atunci când setările sunt modificate, cum ar fi acționarea ca un MX secundar pentru alt domeniu, eliminarea ACL „verify=recipient” sau anumite modificări ale local_part_suffix). Un atac de la distanță este, de asemenea, posibil dacă atacatorul este capabil să mențină conexiunea la server deschisă timp de 7 zile (de exemplu, trimiterea unui octet pe minut pentru a ocoli un timeout). În același timp, este posibil să existe vectori de atac mai simpli pentru exploatarea de la distanță a problemei.

Vulnerabilitatea este cauzată de verificarea incorectă a adresei destinatarului în funcția deliver_message() definită în fișierul /src/deliver.c. Prin manipularea formatării adresei, un atacator poate realiza substituirea datelor sale în argumentele unei comenzi apelate prin funcția execv() cu drepturi root. Funcționarea nu necesită utilizarea tehnicilor complexe utilizate pentru depășirea memoriei tampon sau coruperea memoriei; înlocuirea simplă a caracterelor este suficientă.

Problema este legată de utilizarea constructului pentru conversia adresei:

deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", new->adresa));
deliver_domain = expand_string(
string_sprintf("${domeniu:%s}", nou->adresa));

Funcția expand_string() este un combinator prea complicat, inclusiv recunoașterea comenzii „${run{command arguments}”, care duce la lansarea unui handler extern. Astfel, pentru a ataca într-o sesiune SMTP, un utilizator local trebuie doar să trimită o comandă de genul „RCPT TO „nume utilizator+${run{...}}@localhost”', unde localhost este una dintre gazdele din lista local_domains, iar numele de utilizator este numele unui utilizator local existent.

Dacă serverul funcționează ca un releu de e-mail, este suficient să trimiteți de la distanță comanda „RCPT LA „${run{...}}@relaydomain.com”', unde relaydomain.com este una dintre gazdele listate în relay_to_domains secțiunea de setări. Deoarece Exim nu renunță la modul de privilegii (deliver_drop_privilege = false), comenzile transmise prin „${run{...}}” vor fi executate ca root.

Este de remarcat faptul că vulnerabilitatea a fost eliminat în versiunea 4.92 lansată în februarie, fără a sublinia că remedierea ar putea duce la probleme de securitate. Nu există niciun motiv să credem că a existat o ascundere deliberată a vulnerabilității de către dezvoltatorii Exim, deoarece problema a fost rezolvată în timpul corecţiile eșec care apare atunci când sunt transmise adrese incorecte, iar vulnerabilitatea a fost identificată de Qualys în timpul unui audit al modificărilor în Exim.

O remediere pentru versiunile anterioare care continuă să fie utilizate în distribuții este disponibilă în prezent numai ca plasture. Lansări corective pentru filialele anterioare pentru a remedia problema sunt programate pentru 11 iunie. Actualizările pachetului sunt gata pentru Debian, Ubuntu, openSUSE. Arch Linux и Fedora Furnizează versiunea 4.92, în care problema nu apare. Problemă RHEL și CentOS nu susceptibil, deoarece Exim nu este inclus în depozitul lor obișnuit de pachete.

Sursa: opennet.ru

Adauga un comentariu