È stata pubblicata una nuova versione stabile del toolkit Flatpak 1.12, che fornisce un sistema per la creazione di pacchetti autonomi, non legati a specifiche distribuzioni Linux e eseguiti in un contenitore speciale che isola l'applicazione dal resto del sistema. Il supporto per l'esecuzione dei pacchetti Flatpak è garantito per Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux e Ubuntu. I pacchetti Flatpak sono inclusi nel repository di Fedora e supportati nell'applicazione di gestione software GNOME.
Novità principali nella versione Flatpak 1.12:
- Migliorata la gestione degli ambienti sandbox annidati utilizzati nel pacchetto flatpak con il client per il servizio di distribuzione di giochi Steam. Negli ambienti sandbox annidati è consentita la creazione di gerarchie di directory separate in /usr e /app, che sono utilizzate in Steam per eseguire giochi in un contenitore separato con la propria partizione /usr, isolata dall'ambiente del client Steam.
- In tutti i pacchetti con lo stesso identificativo dell'applicazione (app-ID) è garantito l'accesso condiviso alle directory /tmp e $XDG_RUNTIME_DIR. Facoltativamente, usando il flag «—allow=per-app-dev-shm», è possibile abilitare l'uso della directory condivisa /dev/shm.
- Migliorato il supporto per le applicazioni con interfaccia utente testuale (TUI), come gdb.
- Nella utility build-update-repo è stata aggiunta un'implementazione più veloce del comando «ostree prune», ottimizzata per lavorare con repository in modalità archive.
- Risolta la vulnerabilità CVE-2021-41133 nell'implementazione del meccanismo dei portali, relativa all'assenza di regole seccomp che bloccano nuove chiamate di sistema relative al montaggio delle partizioni. La vulnerabilità permetteva all'applicazione di creare un sandbox annidato per bypassare i meccanismi di verifica dei «portali», utilizzati per gestire l'accesso alle risorse al di fuori del contenitore.
Di conseguenza, un attaccante tramite l'esecuzione di chiamate di sistema associate al montaggio poteva aggirare il meccanismo di isolamento sandbox e ottenere accesso completo al contenuto dell'ambiente host. L'exploitation di questa vulnerabilità è possibile solo in pacchetti che forniscono alle applicazioni accesso diretto a socket AF_UNIX, utilizzati, ad esempio, in Wayland, Pipewire e pipewire-pulse. Nella versione 1.12.0 la vulnerabilità non è stata completamente risolta, quindi è stato rilasciato un aggiornamento 1.12.1 a seguito di ciò.
Ricordiamo che Flatpak offre agli sviluppatori di applicazioni la possibilità di semplificare la distribuzione dei propri programmi, che non sono inclusi nei repository ufficiali delle distribuzioni, preparando un unico contenitore universale senza la necessità di creare versioni separate per ciascuna distribuzione. Per gli utenti preoccupati per la sicurezza, Flatpak consente di eseguire applicazioni sospette in un contenitore, fornendo accesso solo alle funzioni di rete e ai file dell'utente correlati all'applicazione. Gli utenti interessati alle novità possono installare le versioni più recenti di applicazioni in fase di test e stabili senza dover apportare modifiche al sistema. Ad esempio, i pacchetti Flatpak sono disponibili per LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio, e molti altri.
Per ridurre la dimensione del pacchetto, include solo le dipendenze specifiche per l'applicazione, mentre le librerie di sistema e grafiche di base (GTK, Qt, librerie GNOME e KDE, ecc.) sono fornite come runtime di base modulari. La principale differenza tra Flatpak e Snap è che Snap utilizza i componenti dell'ambiente del sistema principale e l'isolamento basato sulla filtrazione delle chiamate di sistema, mentre Flatpak crea un contenitore separato dal sistema e opera con ampie collezioni di runtime, fornendo come dipendenze non pacchetti, ma ambienti di sistema modulari (ad esempio, tutte le librerie necessarie per il funzionamento dei programmi GNOME o KDE).
Oltre all'ambiente di sistema standard (runtime), installato tramite un repository dedicato, vengono fornite dipendenze aggiuntive (bundle) necessarie per il funzionamento dell'applicazione. Insieme, runtime e bundle costituiscono il contenuto del contenitore, poiché il runtime è installato separatamente e può essere legato a più contenitori, evitando così la duplicazione dei file di sistema comuni. In un sistema possono essere installati diversi runtime (GNOME, KDE) o più versioni dello stesso runtime (GNOME 3.40, GNOME 3.42). Un contenitore con un'applicazione come dipendenza utilizza il legame solo a un determinato runtime, senza considerare i pacchetti separati di cui è composto il runtime. Tutti gli elementi mancanti vengono confezionati direttamente insieme all'applicazione. Durante la creazione del contenitore, il contenuto del runtime è montato come la partizione /usr, mentre il bundle è montato nella directory /app.
La configurazione del runtime e dei contenitori delle applicazioni avviene tramite la tecnologia OSTree, che consente di aggiornare l'immagine in modo atomico da un repository simile a Git, permettendo l'applicazione di metodi di controllo versione ai componenti della distribuzione (ad esempio, è possibile ripristinare rapidamente il sistema a uno stato precedente). I pacchetti RPM vengono trasmessi al repository OSTree tramite un'apposita interfaccia chiamata rpm-ostree. L'installazione e l'aggiornamento dei pacchetti all'interno dell'ambiente di lavoro non sono supportati; il sistema viene aggiornato non a livello di singoli componenti, ma in modo completo, cambiando il proprio stato in modo atomico. Sono forniti strumenti per l'applicazione incrementale degli aggiornamenti, evitando la necessità di una sostituzione totale dell'immagine ad ogni aggiornamento.
L'ambiente isolato viene creato in modo completamente indipendente dal sistema operativo utilizzato e, con le impostazioni di pacchetto appropriate, non ha accesso ai file e ai processi dell'utente o del sistema principale; non può accedere direttamente all'hardware, tranne per l'output tramite DRI e le chiamate al sottosistema di rete. L'output grafico e l'organizzazione dell'input sono implementati tramite il protocollo Wayland o attraverso il forwarding del socket X11. L'interazione con l'ambiente esterno è basata sul sistema di messaggistica DBus e su una API speciale, Portals.
Per l'isolamento viene utilizzato uno strato di Bubblewrap e le tecnologie tradizionali di virtualizzazione dei contenitori per Linux, basate su cgroups, spazi dei nomi (namespaces), Seccomp e SELinux. Per l'uscita audio viene utilizzato PulseAudio. Tuttavia, l'isolamento può essere disattivato, un'opzione sfruttata dagli sviluppatori di molti pacchetti popolari per ottenere accesso completo al filesystem e a tutti i dispositivi del sistema. Ad esempio, i pacchetti GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity e VLC vengono forniti con una modalità di isolamento limitata, che consente l'accesso completo alla home directory.
In caso di compromissione dei pacchetti con accesso alla home directory, nonostante la presenza dell'etichetta «sandboxed» nella descrizione del pacchetto, l'attaccante può eseguire il proprio codice semplicemente modificando il file ~/.bashrc. Un'altra questione riguarda il controllo delle modifiche ai pacchetti e la fiducia nei costruttori di pacchetti, che spesso non sono collegati al progetto principale o alle distribuzioni.
Fonte: opennet.ru
