Nakakita sila ng kahinaan sa firejail na nagpapahintulot sa root access sa system

Kamakailan ay inilabas nila ang balita na ang isang kahinaan ay nakilala (nakalista na sa ilalim ng CVE-2022-31214) sa tool sa sandboxing ng Firejail app, ito ay nakadetalye na ang nakitang kapintasan ay maaaring magbigay-daan sa isang lokal na user na maging ugat sa host system.

Ginagamit ng Firejail ang mekanismo ng mga namespace, AppArmor, at pag-filter ng tawag sa system (seccomp-bpf) sa Linux para sa paghihiwalay, ngunit nangangailangan ng mga mataas na pribilehiyo upang i-configure ang isang nakahiwalay na release, na nakukuha nito sa pamamagitan ng pag-binding sa suid root flag utility o pagtakbo gamit ang sudo.

Ang kahinaan ay dahil sa isang error sa lohika ng opsyong “–join=" », idinisenyo upang kumonekta sa isang nakahiwalay na kapaligiran na tumatakbo na (katulad ng utos sa pag-login para sa isang sandbox na kapaligiran) na may kapaligiran na tinukoy ng ID ng prosesong tumatakbo dito. Sa yugto bago ang paglunsad, nakita ng firejail ang mga pribilehiyo ng tinukoy na proseso at inilalapat ang mga ito sa bagong proseso na nagsasama sa kapaligiran gamit ang opsyong “–join”.

Bago kumonekta, sinusuri kung ang tinukoy na proseso ay tumatakbo sa kapaligiran ng firejail. Sinusuri ng pagsusuring ito ang pagkakaroon ng /run/firejail/mnt/join file. Upang samantalahin ang kahinaan, maaaring gayahin ng isang umaatake ang isang kathang-isip na hindi nakahiwalay na kapaligiran ng firejail gamit ang mount namespace at pagkatapos ay kumonekta dito gamit ang "--join" na opsyon.

Kung hindi na-enable ng configuration ang mode ng pagbabawal sa pagkuha ng mga karagdagang pribilehiyo sa mga bagong proseso (prctl NO_NEW_PRIVS), ikokonekta ng firejail ang user sa isang fictitious environment at susubukang ilapat ang user namespace configuration ng mga user identifier (namespace user) ng proseso ng init ( PID 1).

Karamihan sa lohika sa likod ng function ng pagsali ay nasa source code mula sa `src/firejail/join.c` file. Ang mga kritikal na seksyon ng code ay isinasagawa gamit ang nakataas na mga pribilehiyo (epektibong UID 0). Ang ID ng proseso ay ipinasa bilang isang utos ang line argument ay siniyasat upang matukoy kung ito ay isang rlalagyan at matukoy ang ilan sa mga katangian nito na Nalalapat din ito sa bagong proseso ng pagpasok.

Ang pangunahing pamantayan para sa pagpapasya kung sasali sa target na proseso Ang nagtagumpay ay ang pagkakaroon ng isang file sa mount namespace ng target, proseso na matatagpuan sa /run/firejail/mnt/join. Ang pagpapatunay na ito ay ginagawa sa f`is_ready_for_join()` function. Binuksan ang file gamit ang lAng `O_RDONLY|O_CLOEXEC` na mga flag at ang trace na `fstat()` na resulta ay dapat matugunan ang mga sumusunod na kinakailangan:

– ang file ay dapat na isang normal na file.
– ang file ay dapat na pagmamay-ari ng userid 0 (tulad ng nakikita mula sa unang gumagamit
namespace).
– ang file ay dapat na 1 byte ang laki.

Bilang isang resulta, ang prosesong konektado sa pamamagitan ng "firejail --join" ay mapupunta sa namespace orihinal na user ID ng user na may hindi nagbabagong mga pribilehiyo, ngunit sa ibang mount point space, ganap na kinokontrol ng attacker.

Ang resultang "joined" na shell ay mabubuhay na ngayon sa unang user
namespace, na pinapanatili pa rin ang orihinal na normal na mga pribilehiyo ng user, gayunpaman ang mount namespace ang magiging kontrolado ng attacker. Bilang
hindi nailapat ang configuration ng nonewprivs, maaari na ang umaatake
magpatakbo ng mga setuid-root program sa loob ng mount namespace na ito

Sa partikular, ang isang attacker ay maaaring magpatakbo ng mga setuid-root program sa espasyo ng mount point na nilikha nito, na nagbibigay-daan dito, halimbawa, baguhin ang /etc/sudoers configuration o mga parameter ng PAM sa file hierarchy nito at magkaroon ng kakayahang magpatakbo ng mga command bilang root gamit ang sudo o mga utility nito.

Sa wakas, ito ay nagkakahalaga ng pagbanggit na ang isang functional exploit ay binuo, nasubok sa mga kasalukuyang bersyon ng openSUSE, Debian, Arch, Gentoo at Fedora na may naka-install na firejail utility.

Ang problema ay naayos sa firejail na bersyon 0.9.70. Bilang pag-aayos ng seguridad, maaari mong itakda ang configuration (/etc/firejail/firejail.config) sa "no join" at "force-nonewprivs yes".

Sa wakas kung interesado kang malaman ang tungkol dito, maaari mong suriin ang mga detalye sa sumusunod na link.


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.