Byla zveřejněna nová stabilní větev nástroje Flatpak 1.12, který poskytuje systém pro sestavení samostatných balíčků, které nejsou vázány na konkrétní distribuce Linuxu a jsou spouštěny ve speciálním kontejneru, jenž izoluje aplikaci od zbytku systému. Podpora spouštění Flatpak balíčků je zajištěna pro Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux a Ubuntu. Flatpak balíčky jsou zahrnuty v repozitáři Fedora a jsou podporovány vestavěným správcem aplikací GNOME.
Klíčové novinky ve větvi Flatpak 1.12:
- Bylo vylepšeno řízení vnořených sandboxů používaných ve flatpak balíčku s klientem pro herní službu Steam. Ve vnořených sandbocích bylo povoleno vytváření samostatných hierarchií adresářů /usr a /app, což je využíváno ve Steamu k spuštění her v odděleném kontejneru se svým vlastním oddílem /usr, izolovaným od prostředí klienta Steam.
- Ve všech instancích balíčků se stejným identifikátorem aplikace (app-ID) je zajištěno sdílení adresářů /tmp a $XDG_RUNTIME_DIR. Volitelně pomocí přepínače "--allow=per-app-dev-shm" lze povolit použití sdíleného adresáře /dev/shm.
- Byla vylepšena podpora aplikací s textovým uživatelským rozhraním (TUI), jako je gdb.
- Do nástroje build-update-repo byla přidána rychlejší implementace příkazu "ostree prune", optimalizovaná pro práci s repozitáři, které se nacházejí v režimu archivu.
- Byla odstraněna zranitelnost CVE-2021-41133 v implementaci mechanismu portálů, která se týká absence blokování nových systémových volání vztahujících se k montování oddílů v pravidlech seccomp. Tato zranitelnost umožnila aplikaci vytvořit vnořený sandbox pro obcházení ověřovacích mechanismů "portálů", které se používají k zajištění přístupu k zdrojům mimo kontejner.
V důsledku toho mohl útočník prostřednictvím vykonávání souvisejících systémových volání k montování obejít mechanismus izolace sandboxu a získat plný přístup k obsahu hostitelského prostředí. Využití zranitelnosti je možné pouze v balíčcích, které poskytují aplikacím přímý přístup k soketům AF_UNIX, které se například používají v Waylandu, Pipewire a pipewire-pulse. V verzi 1.12.0 byla zranitelnost odstraněna neúplně, a proto bylo ihned po jejím zjištění vydáno aktualizované 1.12.1.
Připomínáme, že Flatpak dává vývojářům aplikací možnost usnadnit distribuci svých programů, které nejsou součástí oficiálních repozitářů distribucí, přípravou jednoho univerzálního kontejneru, aniž by bylo nutné vytvářet samostatné sestavení pro každou distribuci. Uživatelům, kteří dbají na bezpečnost, Flatpak umožňuje spustit problematickou aplikaci v kontejneru, přičemž poskytuje přístup pouze k síťovým funkcím a uživatelským souborům souvisejícím s aplikací. Uživatelům, kteří se zajímají o novinky, Flatpak umožňuje instalaci nejnovějších testovacích a stabilních verzí aplikací, aniž by bylo nutné zasahovat do systému. Například Flatpak balíčky jsou k dispozici pro LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio atd.
Aby se snížila velikost balíčku, zahrnuje pouze závislosti specifické pro aplikaci, zatímco základní systémové a grafické knihovny (GTK, Qt, knihovny GNOME a KDE atd.) jsou dodány jako připojitelné typové runtime prostředí. Klíčový rozdíl mezi Flatpak a Snap spočívá v tom, že Snap používá komponenty prostředí hlavního systému a izolaci založenou na filtrování systémových volání, zatímco Flatpak vytváří oddělený kontejner od systému a operuje s velkými sadami runtime, přičemž jako závislosti poskytuje nikoli balíčky, ale typová systémová prostředí (například všechny knihovny potřebné pro fungování programů GNOME nebo KDE).
Kromě typického systémového prostředí (runtime), které se instaluje prostřednictvím speciálního repozitáře, jsou dodávány další závislosti (bundle) potřebné pro chod aplikace. Celkově runtime a bundle tvoří obsah kontejneru, přičemž runtime se instaluje odděleně a váže se na více kontejnerů současně, což umožňuje vyhnout se duplikaci sdílených systémových souborů pro kontejnery. V jednom systému může být nainstalováno několik různých runtime (GNOME, KDE) nebo několik verzí jednoho runtime (GNOME 3.40, GNOME 3.42). Kontejner s aplikací jako závislost používá vazbu pouze na určité runtime, bez ohledu na jednotlivé balíčky, ze kterých se runtime skládá. Všechny chybějící prvky jsou zabaleny přímo spolu s aplikací. Při vytváření kontejneru se obsah runtime montuje jako oddíl /usr a bundle se montuje do adresáře /app.
Obsah runtime a kontejnerů aplikací se vytváří pomocí technologie OSTree, při které se obraz atomárně aktualizuje z Git-podobného úložiště, což umožňuje aplikovat metody verzionování na komponenty distribuce (například je možné rychle vrátit systém do předchozího stavu). RPM balíčky se překrývají do repozitáře OSTree pomocí speciální vrstvy rpm-ostree. Samostatná instalace a aktualizace balíčků uvnitř pracovního prostředí není podporována, systém se aktualizuje nikoli na úrovni jednotlivých komponentů, ale celkově, atomárně mění své stavy. Jsou poskytovány prostředky pro inkrementální aplikaci aktualizací, které osvobozují od nutnosti úplné výměny obrazu při každé aktualizaci.
Vytvářené izolované prostředí je plně nezávislé na používané distribuci a při správném nastavení balíčku nemá přístup k souborům a procesům uživatele nebo základního systému, nemůže přímo komunikovat s hardwarem, kromě výstupu přes DRI a požadavků na síťový subsystém. Výstup grafiky a organizace vstupu jsou realizovány prostřednictvím protokolu Wayland nebo pomocí přesměrování socketu X11. Interakce s vnějším prostředím je založena na systému zpráv DBus a speciálním API Portals.
Pro izolaci se používá vrstva Bubblewrap a tradiční technologie kontejnerové virtualizace pro Linux, založené na využití cgroups, jmenných prostorů (namespaces), Seccomp a SELinux. Pro výstup zvuku se používá PulseAudio. Přitom může být izolace vypnuta, což využívají vývojáři mnoha populárních balíčků k získání plného přístupu k FS a všem zařízením v systému. Například balíčky GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity a VLC se dodávají s omezeným režimem izolace, který ponechává plný přístup k domácímu adresáři.
V případě kompromitace balíčků s přístupem k domácímu adresáři, navzdory přítomnosti štítku "sandboxed" v popisu balíčku, útočník potřebuje pouze změnit soubor ~/ .bashrc pro spuštění svého kódu. Samostatným tématem je kontrola změn v balíčcích a důvěra k výrobcům balíčků, kteří často nejsou spojení se základním projektem nebo distribucemi.
Zdroj: opennet.ru
