A fost lansată versiunea instrumentului pentru organizarea lucrului în mediile izolate Bubblewrap 0.6, utilizat în general pentru a restricționa aplicațiile individuale ale utilizatorilor fără privilegii. În practică, Bubblewrap este utilizat de proiectul Flatpak ca un strat pentru izolarea aplicațiilor lansate din pachete. Codul proiectului este scris în limbajul C și este distribuit sub licența LGPLv2+.
Pentru izolare se folosesc tehnologii tradiționale de virtualizare a containerelor în Linux, bazate pe utilizarea cgroups, spațiilor de nume (namespaces), Seccomp și SELinux. Pentru a efectua operațiuni privilegiate de configurare a containerului, Bubblewrap este lansat cu drepturi root (fișierul executabil are flag-ul suid) cu resetarea privilegiilor după finalizarea inițializării containerului.
Activarea sistemului de spații de nume pentru identificatorul utilizatorului (user namespaces), care permit utilizarea unui set propriu de identificatori în containere, nu este necesară pentru funcționare, deoarece în mod implicit nu funcționează în multe distribuții (Bubblewrap este poziționat ca o implementare suid limitată a unui subset de funcționalități user namespaces — pentru a exclude toți identificatorii utilizatorilor și proceselor din mediu, cu excepția celui curent, se utilizează modurile CLONE_NEWUSER și CLONE_NEWPID). Pentru o protecție suplimentară, programele rulabile sub Bubblewrap sunt lansate în modul PR_SET_NO_NEW_PRIVS, care interzice obținerea de noi privilegii, de exemplu, în prezența flag-ului setuid.
Izolarea la nivelul sistemului de fișiere se realizează prin crearea, în mod implicit, a unui nou spațiu de nume pentru punctele de montare (mount namespace), în care, cu ajutorul tmpfs, se creează un director rădăcină gol. În acest director, dacă este necesar, se atașează partiții ale FS externe în modul «mount —bind» (de exemplu, la pornirea cu opțiunea «bwrap —ro-bind /usr /usr», partiția /usr este transmisă din sistemul principal în modul doar pentru citire). Capacitățile de rețea sunt restricționate la accesul la interfața loopback, izolând stiva de rețea prin flagurile CLONE_NEWNET și CLONE_NEWUTS.
Diferența cheie față de proiectul similar Firejail, care folosește de asemenea un model de lansare cu utilizarea setuid, este că în Bubblewrap stratul pentru crearea containerelor include doar minimul necesar de funcționalități, iar toate funcțiile extinse necesare pentru a lansa aplicații grafice, interacțiunea cu desktopul și filtrarea apelurilor către Pulseaudio, sunt externalizate către Flatpak și executate deja după resetarea privilegiilor. Firejail, pe de altă parte, combină toate funcțiile asociate într-un singur fișier executabil, ceea ce complică auditul său și menținerea securității la un nivel adecvat.
În noua versiune:
- A fost adăugată suportul pentru sistemul de construcție Meson. Suportul pentru construirea cu ajutorul Autotools este păstrat deocamdată, dar va fi eliminat într-una din versiunile viitoare.
- A fost implementată opțiunea „—add-seccomp” pentru a adăuga mai mult de un program seccomp. A fost adăugat un avertisment că, atunci când opțiunea „—seccomp” este specificată din nou, va fi aplicat numai ultimul parametru.
- Rama master din repository-ul git a fost redenumită în main.
- A fost adăugată suport parțial pentru specificația REUSE, care unifică procesul de specificare a informațiilor despre licențe și drepturi de autor. În multe fișiere de cod au fost adăugate antete SPDX-License-Identifier. Respectarea recomandărilor REUSE permite simplificarea identificării automate a licenței aplicabile asupra diferitelor părți ale codului aplicației.
- A fost adăugată verificarea valorii contorului argumentelor din linia de comandă (argc) și implementată o ieșire de urgență în cazul în care contorul este zero. Această modificare ajută la prevenirea problemelor de securitate cauzate de procesarea incorectă a argumentelor din linia de comandă, cum ar fi CVE-2021-4034 în Polkit.
Sursa: opennet.ro
