Rilascio del sistema di pacchetti autosufficienti Flatpak 1.12.0

È stato pubblicato un nuovo ramo stabile del toolkit Flatpak 1.12, che fornisce un sistema per creare pacchetti autonomi non legati a specifiche distribuzioni Linux ed eseguiti in un contenitore speciale che isola l'applicazione dal resto del sistema. Il supporto per l'esecuzione dei pacchetti Flatpak è fornito per Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux e Ubuntu. I pacchetti Flatpak sono inclusi nel repository Fedora e sono supportati dal gestore applicazioni nativo di GNOME.

Principali innovazioni nel ramo Flatpak 1.12:

  • Migliorata la gestione degli ambienti sandbox nidificati utilizzati nel pacchetto flatpak con il client per il servizio di distribuzione dei giochi Steam. Nei sandbox nidificati è consentita la creazione di gerarchie separate delle directory /usr e /app, che viene utilizzata in Steam per avviare i giochi in un contenitore separato con la propria partizione /usr, isolata dall'ambiente con il client Steam.
  • Tutte le istanze del pacchetto con lo stesso identificatore dell'applicazione (app-ID) condividono le directory /tmp e $XDG_RUNTIME_DIR. Facoltativamente, utilizzando il flag “--allow=per-app-dev-shm”, è possibile abilitare l'uso della directory condivisa /dev/shm.
  • Supporto migliorato per le applicazioni TUI (Text User Interface) come gdb.
  • Un'implementazione più rapida del comando “ostree prune” è stata aggiunta all'utilità buildupdate-repo, ottimizzata per lavorare con i repository in modalità archivio.
  • È stata corretta la vulnerabilità CVE-2021-41133 nell'implementazione del meccanismo del portale, associata al mancato blocco delle nuove chiamate di sistema relative al montaggio di partizioni nelle regole seccomp. La vulnerabilità ha consentito all'applicazione di creare una sandbox nidificata per aggirare i meccanismi di verifica del "portale" utilizzati per organizzare l'accesso alle risorse all'esterno del contenitore.

    Di conseguenza, un utente malintenzionato, eseguendo chiamate di sistema relative al montaggio, potrebbe aggirare il meccanismo di isolamento sandbox e ottenere pieno accesso ai contenuti dell'ambiente host. La vulnerabilità può essere sfruttata solo nei pacchetti che forniscono applicazioni con accesso diretto ai socket AF_UNIX, come quelli utilizzati da Wayland, Pipewire e pipewire-pulse. Nella versione 1.12.0 la vulnerabilità non è stata completamente eliminata, quindi subito dopo è stato rilasciato l'aggiornamento 1.12.1.

Ricordiamo che Flatpak consente agli sviluppatori di applicazioni di semplificare la distribuzione dei loro programmi che non sono inclusi nei repository di distribuzione standard preparando un contenitore universale senza creare assiemi separati per ciascuna distribuzione. Per gli utenti attenti alla sicurezza, Flatpak consente di eseguire un'applicazione discutibile in un contenitore, fornendo accesso solo alle funzioni di rete e ai file utente associati all'applicazione. Per gli utenti interessati ai nuovi prodotti, Flatpak consente di installare le ultime versioni test e stabili delle applicazioni senza la necessità di apportare modifiche al sistema. Ad esempio, i pacchetti Flatpak sono creati per LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 AD, Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio, ecc.

Per ridurre le dimensioni del pacchetto, include solo dipendenze specifiche dell'applicazione e il sistema di base e le librerie grafiche (librerie GTK, Qt, GNOME e KDE, ecc.) sono progettate come ambienti runtime standard plug-in. La differenza fondamentale tra Flatpak e Snap è che Snap utilizza i componenti dell'ambiente di sistema principale e l'isolamento basato sul filtraggio delle chiamate di sistema, mentre Flatpak crea un contenitore separato dal sistema e opera con ampi set di runtime, fornendo non pacchetti come dipendenze, ma standard propri ambienti di sistema (ad esempio, tutte le librerie necessarie per il funzionamento dei programmi GNOME o KDE).

Oltre all'ambiente di sistema standard (runtime), installato tramite apposito repository, vengono fornite ulteriori dipendenze (bundle) necessarie al funzionamento dell'applicazione. In totale, runtime e bundle formano il riempimento del contenitore, nonostante il runtime sia installato separatamente e legato a più contenitori contemporaneamente, il che consente di evitare la duplicazione dei file di sistema comuni ai contenitori. Un sistema può avere diversi runtime installati (GNOME, KDE) o diverse versioni dello stesso runtime (GNOME 3.40, GNOME 3.42). Un contenitore con un'applicazione come dipendenza utilizza un'associazione solo a un runtime specifico, senza tenere conto dei singoli pacchetti che compongono il runtime. Tutti gli elementi mancanti vengono impacchettati direttamente con l'applicazione. Quando viene formato un contenitore, i contenuti di runtime vengono montati come partizione /usr e il bundle viene montato nella directory /app.

Il runtime e i contenitori delle applicazioni sono costruiti utilizzando la tecnologia OSTree, in cui l'immagine viene aggiornata atomicamente da un repository simile a Git, che consente di applicare metodi di controllo della versione ai componenti di distribuzione (ad esempio, è possibile ripristinare rapidamente il sistema a una stato precedente). I pacchetti RPM vengono tradotti nel repository OSTree utilizzando uno speciale livello rpm-ostree. L'installazione e l'aggiornamento separati dei pacchetti all'interno dell'ambiente di lavoro non sono supportati; il sistema viene aggiornato non a livello dei singoli componenti, ma nel suo insieme, modificando atomicamente il suo stato. Fornisce strumenti per applicare gli aggiornamenti in modo incrementale, eliminando la necessità di sostituire completamente l'immagine con ogni aggiornamento.

L'ambiente isolato generato è completamente indipendente dalla distribuzione utilizzata e, con opportune impostazioni del pacchetto, non ha accesso a file e processi dell'utente o del sistema principale, non può accedere direttamente all'apparecchiatura, ad eccezione dell'output tramite DRI, e chiamate al sottosistema di rete. L'organizzazione dell'output grafico e dell'input è implementata utilizzando il protocollo Wayland o tramite il socket forwarding X11. L'interazione con l'ambiente esterno si basa sul sistema di messaggistica DBus e su una speciale API Portali.

Per l'isolamento vengono utilizzati il ​​livello Bubblewrap e le tradizionali tecnologie di virtualizzazione dei contenitori Linux, basate sull'utilizzo di cgroup, namespace, Seccomp e SELinux. PulseAudio viene utilizzato per emettere il suono. In questo caso, è possibile disabilitare l'isolamento, utilizzato dagli sviluppatori di molti pacchetti popolari per ottenere l'accesso completo al file system e a tutti i dispositivi nel sistema. Ad esempio, GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity e VLC sono dotati di una modalità di isolamento limitato che lascia pieno accesso alla directory home.

Se i pacchetti con accesso alla directory home vengono compromessi, nonostante la presenza dell'etichetta “sandboxed” nella descrizione del pacchetto, l'attaccante deve solo modificare il file ~/.bashrc per eseguire il suo codice. Una questione separata è il controllo delle modifiche ai pacchetti e la fiducia nei creatori di pacchetti, che spesso non sono associati al progetto o alle distribuzioni principali.

Fonte: opennet.ru

Aggiungi un commento