În serverul de e-mail Exim
Î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
O remediere pentru versiunile anterioare care continuă să fie utilizate în distribuții este disponibilă în prezent numai ca
Sursa: opennet.ru