È disponibile il rilascio dello strumento per l'organizzazione del lavoro in ambienti isolati Bubblewrap 0.6, generalmente utilizzato per limitare applicazioni specifiche degli utenti non privilegiati. Nella pratica, Bubblewrap è impiegato dal progetto Flatpak come strato per l'isolamento delle applicazioni eseguite dai pacchetti. Il codice del progetto è scritto in C ed è distribuito con licenza LGPLv2+.
Per l'isolamento vengono utilizzate tecnologie di virtualizzazione dei contenitori tradizionali di Linux, basate sull'uso di cgroups, spazi dei nomi, Seccomp e SELinux. Per eseguire operazioni privilegiate di configurazione del contenitore, Bubblewrap viene avviato con i diritti di root (file eseguibile con flag suid) e successivamente i privilegi vengono revocati al termine dell'inizializzazione del contenitore.
L'attivazione nel sistema degli spazi dei nomi degli identificatori utente, che consentono di utilizzare set di identificatori separati nei contenitori, non è necessaria per il funzionamento, poiché per impostazione predefinita non funziona in molte distribuzioni (Bubblewrap è posizionato come un'implementazione suid limitata di un sottoinsieme delle funzionalità degli spazi dei nomi utente — per escludere tutti gli identificatori di utenti e processi dall'ambiente, ad eccezione di quello corrente, vengono utilizzati i modi CLONE_NEWUSER e CLONE_NEWPID). Per una protezione aggiuntiva, i programmi eseguiti da Bubblewrap vengono avviati in modalità PR_SET_NO_NEW_PRIVS, che vieta l'acquisizione di nuovi privilegi, ad esempio in presenza di un flag setuid.
L'isolamento a livello di filesystem avviene creando, per impostazione predefinita, un nuovo spazio dei nomi per i punti di montaggio (mount namespace), nel quale, tramite tmpfs, viene creatta una partizione radice vuota. In questa partizione, se necessario, vengono montate le partizioni del file system esterno in modalità "mount —bind" (ad esempio, avviando con l'opzione "bwrap —ro-bind /usr /usr", la partizione /usr viene trasmessa dal sistema principale in modalità di sola lettura). Le capacità di rete vengono limitate all'accesso all'interfaccia loopback con isolamento dello stack di rete tramite i flag CLONE_NEWNET e CLONE_NEWUTS.
La principale differenza rispetto al progetto simile Firejail, che utilizza anche un modello di avvio con setuid, è che in Bubblewrap lo strato per la creazione dei contenitori include solo il minimo necessario di funzionalità, mentre tutte le funzioni avanzate, necessarie per l'avvio delle applicazioni grafiche, l'interazione con il desktop e il filtraggio delle chiamate a Pulseaudio, sono spostate su Flatpak e vengono eseguite già dopo il ripristino dei privilegi. Firejail, invece, unisce in un unico file eseguibile tutte le funzioni ausiliarie, rendendo più difficile il suo audit e mantenimento della sicurezza a un livello adeguato.
Nel nuovo rilascio:
- È stata aggiunta la supporto al sistema di build Meson. Il supporto per la compilazione tramite Autotools è ancora mantenuto, ma sarà rimosso in una delle prossime versioni.
- È stata implementata l'opzione «—add-seccomp» per aggiungere più di un programma seccomp. È stato aggiunto un avviso che, in caso di specifica ripetuta dell'opzione «—seccomp», verrà applicato solo l'ultimo parametro.
- Il branch master nel repository git è stato rinominato in main.
- Aggiunta la supporto parziale per la specifica REUSE, che unifica il processo di indicazione delle informazioni relative alle licenze e ai diritti d'autore. Molti file di codice sono stati aggiornati con l'intestazione SPDX-License-Identifier. Seguire le raccomandazioni REUSE semplifica l'identificazione automatica di quale licenza si applica a quali parti del codice dell'applicazione.
- È stata aggiunta la verifica del conteggio degli argomenti della riga di comando (argc) ed è stato implementato un'uscita d'emergenza nel caso in cui il conteggio sia zero. Questa modifica consente di bloccare problemi di sicurezza causati da una gestione errata degli argomenti della riga di comando, come CVE-2021-4034 in Polkit.
Fonte: opennet.ru
