Compania Qualys a identificat o vulnerabilitate (CVE-2026-3888) în organizarea funcționării legăturii snap-confine și systemd-tmpfiles în Ubuntu, care permite unui utilizator fără privilegii să obțină acces root la sistem. Problema se manifestă în Ubuntu în configurația implicită începând cu versiunea 24.04. În Ubuntu 16.04-22.04, vulnerabilitatea poate fi exploatată în configurații non-standard care imită comportamentul versiunilor mai noi ale distribuției. În Ubuntu, remedierile sunt disponibile în actualizarea de ieri a pachetului snapd. În snapd, problema a fost soluționată în actualizarea 2.75.
Vulnerabilitatea apare din cauza interacțiunii incorecte între utilitarele snap-confine și systemd-tmpfiles, executate cu privilegii elevate. Utilitarul snap-confine creează un mediu sandbox pentru execuția aplicațiilor snap, iar systemd-tmpfiles efectuează curățarea automată a fișierelor și directoarelor temporare. În mod implicit, utilitarul systemd-tmpfiles este configurat să elimine toate fișierele și directoarele vechi din /tmp, ceea ce poate fi folosit de atacatori pentru a înlocui directorul /tmp/.snap în momentul după eliminarea sa de către utilitarul systemd-tmpfiles, dar înainte de recrearea sa de către snap-confine.
Atacul constă în așteptarea pornirii procesului de curățare a fișierelor temporare, înlocuirea directorului /tmp/.snap după eliminarea sa și plasarea unei copii modificate a bibliotecilor în /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange. Atacatorului i-ar putea fi necesare câteva zile pentru a aștepta pornirea systemd-tmpfiles, deoarece în Ubuntu 24.04 procesul de curățare este inițiat la fiecare 10 zile, iar în versiunile mai recente la fiecare 30 de zile. După înlocuirea directorului, atacatorul obține inițializarea unui nou mediu sandbox prin intermediul snap-confine.
În timpul formării ambalajului mediu sandbox în directorul temporar /tmp/.snap, atacatorul așteaptă momentul potrivit și redenumește /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange în /tmp/.snap/usr/lib/x86_64-linux-gnu, înlocuind astfel bibliotecile și asigurând montarea lor bind cu drepturi root. Astfel, atacatorul obține control asupra bibliotecilor partajate și a încărcătorului ld.so, care sunt rulante în mediul sandbox snap și poate obține execuția de cod arbitrar cu privilegii root prin lansarea oricărei programe suid în care se aplică legarea dinamică.
Având acces root într-un mediu sandbox izolat prin AppArmor și un filtru de apeluri sistemice bazat pe seccomp, un atacator poate copia \/bin\/bash în catalogul \/var\/snap\/$SNAP\/common\/ și să îi acorde permisiuni „04755” (suid root). Deși permisiunile sunt modificate în interiorul mediu sandbox, fișierul cu permisiuni modificate este accesibil și în sistemul principal, astfel că pentru a obține acces complet root, este suficient să se execute \/var\/snap\/\/common\/bash ca un utilizator obișnuit fără privilegii dintr-un mediu sistem standard.
În același timp, a fost identificată o vulnerabilitate în instrumentele uutils coreutils (Rust Coreutils), un analog al pachetului GNU Coreutils, scris în Rust. Vulnerabilitatea permite unui utilizator fără privilegii să obțină drepturi root în sistem. Problema a fost identificată în timpul revizuirii modificărilor în Ubuntu 25.10 și a fost rezolvată pe căi ocolite înainte de lansarea Ubuntu 25.10 prin furnizarea \/usr\/bin\/gnurm în loc de uutils rm. În pachetul uutils, problema a fost remediată în versiunea uutils coreutils 0.3.0, fără a menționa în lista de modificări rezolvarea vulnerabilității (s-a menționat că în rm, du, chmod și chgrp a fost implementată o metodă sigură de ocolire a căilor).
Problema este cauzată de o stare de competiție în utilitarul „rm”, care permite unui utilizator local să înlocuiască conținutul unui director cu un link simbolic în timpul ștergerii unui fișier controlat de utilizator de către procesul „rm” cu drepturi root. Printre altele, vulnerabilitatea poate fi exploatată în timpul rularii zilnice dintr-un script cron \/etc\/cron.daily\/apport, care este executat cu privilegii root și șterge recursiv conținutul directorului \/var\/crash, disponibil pentru scriere tuturor utilizatorilor din sistem.
Atunci când șterge directorii recursiv, utilitarul rm verifică mai întâi toate directoarele și apoi le șterge succesiv în ordine inversă, apelând funcția rmdir(). Dacă se reușește înlocuirea directorului părinte cu un link simbolic imediat după verificarea acestuia, dar înainte de a verifica directoarele copil, operația va duce la ștergerea directorului la care se referă linkul simbolic. Astfel, se poate obține nu doar ștergerea oricărui fișier din sistem, ci și ridicarea privilegiilor prin ștergerea directorului \/tmp\/snap-private-tmp\/$SNAP\/tmp\/.snap pentru a înlocui conținutul mediu sandbox al pachetului snap (metoda de obținere a root-ului este similară primei vulnerabilități).
Sursa: opennet.ro
