Vulnerabilități în OpenSMTPD care permit obținerea de drepturi root de la distanță și local

Compania Qualys a evidențiat o altă vulnerabilitate critică de la distanță (CVE-2020-8794) în serverul de email , multiplexorul de terminal text (similar cu GNU screen), dezvoltat de proiectul OpenBSD. Ca și vulnerabilitatea identificată la sfârșitul lunii ianuarie, vulnerabilitatea, noua problemă oferă posibilitatea executării de comenzi shell arbitrare pe server cu drepturi de utilizator root. Vulnerabilitatea remediată în versiunea OpenSMTPD 6.6.4p1.

Problema este cauzată de o eroare în codul care se ocupă cu livrarea emailurilor pe serverele de email externe (nu în codul care procesează conexiunile de intrare). Atacul poate avea loc atât pe partea clientului, cât și pe partea serverului. Pe partea clientului, atacul este posibil în configurația implicită OpenSMTPD, în care OpenSMTPD acceptă cereri doar pe interfața de rețea internă (localhost) și trimite mesaje de email pe servere externe. Pentru a exploata vulnerabilitatea, este suficient ca în timpul livrării unui email, OpenSMTPD să stabilească o sesiune cu un server de email controlat de atacator sau ca atacatorul să se poată interfera în conexiunea clientului (MITM sau redirecționare în timpul atacurilor prin DNS sau BGP).

Pentru a ataca pe partea serverului, OpenSMTPD trebuie configurat pentru a accepta cereri externe de la alte servere de email sau să ofere servicii externe care permit trimiterea de cereri pentru un email arbitrariu (de exemplu, formulare de confirmare a adresei pe site-uri). De exemplu, un atacator poate să se conecteze la serverul OpenSMTPD și să trimită un email invalid (către un utilizator inexistent), ceea ce va duce la trimiterea unui email de răspuns cu un cod de eroare (bounce) către serverul atacatorului. Atacatorul poate exploata vulnerabilitatea în momentul în care OpenSMTPD se conectează pentru a livra notificarea pe serverul atacatorului. Comenzile shell injectate în timpul atacului sunt plasate într-un fișier care este executat cu drepturi de root la repornirea OpenSMTPD, așa că atacatorul trebuie să aștepte repornirea OpenSMTPD sau să inițieze o cădere a OpenSMTPD.

Problema este prezenta în funcția mta_io() din codul pentru interpretarea răspunsului multi-linie returnat de serverul de la distanță după stabilirea conexiunii (de exemplu, „250-ENHANCEDSTATUSCODES” și „250 HELP”). În OpenSMTPD, se presupune că prima linie conține un număr format din trei cifre și text, separate prin simbolul „-”, iar a doua linie un număr format din trei cifre și text, separate printr-un spațiu. Dacă în a doua linie, după numărul format din trei cifre, nu există un spațiu și text, pointerul folosit pentru a determina textul este setat pe byte-ul următor caracterului ‘\0’ și se face o încercare de copiere în bufferul datelor, care urmează după sfârșitul liniei.

La cererea proiectului OpenBSD, publicarea detaliilor despre exploatarea vulnerabilității a fost amânată până pe 26 februarie, pentru a oferi utilizatorilor oportunitatea de a-și actualiza sistemele. Problema este prezentă în codul de bază din decembrie 2015, însă exploatarea pentru execuția codului cu privilegii root este posibilă din mai 2018. Cercetătorii au pregătit un prototip de exploit funcțional, care a fost testat cu succes în versiunile OpenSMTPD pentru OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testing) și Fedora 31.

În OpenSMTPD există și a fost identificată o altă vulnerabilitate (CVE-2020-8793), care permite unui utilizator local să citească prima linie a oricărui fișier din sistem. De exemplu, este posibil să se citească prima linie /etc/master.passwd, în care este stocat hash-ul parolei utilizatorului root. Vulnerabilitatea permite, de asemenea, citirea întregului conținut al unui fișier aparținând unui alt utilizator, dacă acel fișier se află în aceeași FS cu directorul /var/spool/smtpd/. Problema nu este exploatabilă în multe distribuții Linux, în care valoarea /proc/sys/fs/protected_hardlinks este setată pe 1.

Problema este rezultatul unei eliminări incomplete problemelor, enunțate în cadrul auditului efectuat de Qualys în 2015. Atacatorul poate obține executarea codului său cu privilegii din grupa „_smtpq”, setând variabila „PATH=.” și plasând în directorul curent un script cu numele makemap (utilitarul smtpctl rulează makemap fără a specifica calea explicit). Obținând acces la grupa „_smtpq”, atacatorul poate apoi declanșa o stare de competiție (creând un fișier mare în directorul offline și trimițând semnalul SIGSTOP) și, până la finalizarea procesării, poate substitui fișierul din directorul offline cu un hard link simbolic, care indică spre fișierul țintă, al cărui conținut trebuie citit.

Este remarcabil că în Fedora 31 vulnerabilitatea permite obținerea imediată a privilegiilor grupului root, deoarece procesul smtpctl este dotat cu un flag setgid root, în loc de setgid smtpq. Obținând acces la grupul root, se poate rescrie conținutul /var/lib/sss/mc/passwd și se poate obține acces complet root în sistem.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster