Vo firejail odhalili zraniteľnosť, ktorá umožňovala root prístup do systému

Nedávno bolo oznámené, že v nástroji Firejail na sandboxovanie aplikácií bola identifikovaná zraniteľnosť (ktorá už bola katalogizovaná pod kódom CVE-2022-31214) , pričom zistená chyba by mohla umožniť lokálnemu používateľovi získať root oprávnenia na hostiteľskom systéme.

Firejail používa mechanizmus menných priestorov, AppArmor a filtrovanie systémových hovorov (seccomp-bpf) v Linuxe na izoláciu, ale vyžaduje zvýšené privilégiá na konfiguráciu izolovaného vydania, ktoré získa naviazaním na suid root flag utility alebo spustením pomocou sudo.

Zraniteľnosť pramení z chyby v logike možnosti `--join=<PID>`, ktorá je určená na pripojenie k už spustenému izolovanému prostrediu (podobne ako príkaz login pre sandbox) definovaním prostredia s ID procesu, ktorý v ňom beží. Vo fáze pred spustením Firejail zistí privilégiá zadaného procesu a aplikuje ich na nový proces, ktorý sa pripája k prostrediu s možnosťou `--join`.

Pred pripojením skontroluje, či je zadaný proces spustený v prostredí Firejail. Táto kontrola vyhodnotí existenciu súboru /run/firejail/mnt/join. Útočník môže túto zraniteľnosť zneužiť simuláciou neizolovaného, ​​fiktívneho prostredia Firejail pomocou menného priestoru mount a potom sa k nemu pripojiť pomocou možnosti „--join“.

Ak konfigurácia neumožňuje režim zákazu získavania ďalších privilégií v nových procesoch (prctl NO_NEW_PRIVS), firejail pripojí používateľa k fiktívnemu prostrediu a pokúsi sa použiť konfiguráciu používateľského menného priestoru identifikátorov používateľov (používateľ menného priestoru) procesu init ( PID 1).

Väčšina logiky funkcie join sa nachádza v zdrojovom kóde súboru `src/firejail/join.c`. Kritické časti kódu sa vykonávajú so zvýšenými oprávneniami (efektívne UID 0). ID procesu odovzdané ako argument príkazového riadku sa kontroluje, aby sa určilo, či ide o nádobu a aby sa určili niektoré jeho vlastnosti, ktoré sa použijú aj na novo pripájajúci sa proces.

Primárnym kritériom na určenie úspešnosti pripojenia k cieľovému procesu je prítomnosť súboru v mennom priestore pripojenia cieľového procesu, ktorý sa nachádza v adresári /run/firejail/mnt/join. Táto kontrola sa vykonáva pomocou funkcie `is_ready_for_join()`. Súbor sa otvára pomocou príznakov `O_RDONLY|O_CLOEXEC` a výstup sledovania `fstat()` musí spĺňať nasledujúce požiadavky:

– súbor musí byť normálny súbor.
– súbor musí vlastniť užívateľské id 0 (ako je zrejmé z pôvodného užívateľa
menný priestor).
– súbor musí mať veľkosť 1 bajt.

V dôsledku toho proces pripojený cez „firejail --join“ skončí v pôvodnom mennom priestore ID používateľa s nezmenenými oprávneniami, ale v inom priestore bodu pripojenia, úplne kontrolovanom útočníkom.

Výsledný „pripojený“ shell bude teraz fungovať pre pôvodného používateľa
menný priestor, stále si však zachováva pôvodné privilégiá bežného používateľa menný priestor pripojenia bude ten, ktorý bude ovládať útočník. Ako
konfigurácia nonewprivs nebola použitá, útočník teraz môže
spustiť programy setuid-root v rámci tohto priestoru názvov pripojenia

Útočník môže najmä spúšťať programy setuid-root v priestore bodu pripojenia, ktorý vytvoril, čo mu umožňuje napríklad zmeniť konfiguráciu /etc/sudoers alebo parametre PAM v hierarchii súborov a získať možnosť spúšťať príkazy ako root. pomocou sudo alebo jeho nástrojov.

Nakoniec stojí za zmienku, že bol vyvinutý funkčný exploit, testovaný na aktuálnych verziách openSUSE, Debian, Arch, Gentoo a Fedora s nainštalovanou utilitou firejail.

Problém bol opravený vo verzii Firejail 0.9.70. Ako opravu zabezpečenia môžete nastaviť konfiguráciu (/etc/firejail/firejail.config) na „no join“ a „force-nonewprivs yes“.

Na záver, ak sa chcete o tom dozvedieť viac , podrobnosti nájdete na nasledujúcom odkaze.


Pridať ako preferovaný zdroj v Google