În utilitarul pentru executarea izolată a aplicațiilor Firejail a fost identificată o vulnerabilitate (CVE-2022-31214), care permite unui utilizator local să obțină drepturi de root în sistemul principal. Există un exploit funcțional disponibil public, verificat în versiunile recente de openSUSE, Debian, Arch, Gentoo și Fedora cu utilitarul firejail instalat. Problema a fost rezolvată în versiunea firejail 0.9.70. Ca soluție de protecție, pot fi setate în configurațiile (\/etc\/firejail\/firejail.config) opțiunile „join no” și „force-nonewprivs yes”.
Firejail utilizează pentru izolare mecanismele de namespace, AppArmor și filtrarea apelurilor de sistem (seccomp-bpf) în Linux, dar pentru configurarea execuției izolate necesită privilegii ridicate, pe care le obține prin asocierea cu utilitarul suid root sau prin rularea cu sudo. Vulnerabilitatea este cauzată de o eroare în logica opțiunii „—join=<PID>”, menită să se conecteze la un mediu izolat deja în execuție (similar comenzii login pentru medii sandbox) prin identificarea mediuului după identificatorul procesului care rulează în acesta. Înainte de a elimina privilegiile, firejail determină privilegiile procesului specificat și le aplică noului proces care se conectează la mediu prin opțiunea „—join”.
Înainte de conectare, se efectuează o verificare pentru a determina dacă procesul specificat rulează în mediu firejail. Această verificare evaluează existența fișierului \/run\/firejail\/mnt\/join. Pentru a exploata vulnerabilitatea, atacatorul poate simula un mediu firejail fictiv neizolat, utilizând spațiul de nume de montare (mount namespace), după care se poate conecta la acesta folosind opțiunea „—join”. Dacă în configurații nu este activat modul de restricție a obținerii de privilegii suplimentare în noile procese (prctl NO_NEW_PRIVS), firejail va conecta utilizatorul la mediul fictiv și va încerca să aplice configurațiile spațiului de nume pentru identificatorii de utilizatori (user namespace) ale procesului init (PID 1).
În final, procesul conectat prin „firejail —join” se va regăsi în spațiul de nume al identificatorilor de utilizator inițial al utilizatorului, păstrând privilegii neschimbate, dar într-un alt spațiu de montare, complet controlat de atacator. Acesta poate, de asemenea, să execute programe setuid-root în spațiul său de montare creat, permițând, de exemplu, modificarea setărilor /etc/sudoers sau a parametrilor PAM în ierarhia sa de fișiere și obținerea capacității de a rula comenzi cu drepturi de root folosind utilitarele sudo sau su.
Sursa: opennet.ro
