Haavatavus cgroups v1-s, mis võimaldab põgeneda isoleeritud konteinerist

Avaldatud on Linuxi tuumas cgroups v2022 ressursside piiramise mehhanismi juurutamise haavatavuse (CVE-0492-1) üksikasjad, mida saab kasutada isoleeritud konteineritest pääsemiseks. Probleem on ilmnenud alates Linuxi kernelist 2.6.24 ja see parandati kerneli versioonides 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 ja 4.9.301. Distributsioonide pakettide värskenduste avaldamist saate jälgida järgmistel lehtedel: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

Haavatavuse põhjuseks on failitöötleja release_agent loogikavea, mis ei suuda käitleja täielike õigustega käitamisel korralikult kontrollida. Faili release_agent kasutatakse programmi määratlemiseks, mida kernel käivitab, kui protsess cgroupis lõpetatakse. See programm töötab juurnimeruumis ja kõigi juurnimeruumi „võimalustega”. Eeldati, et release_agent sättele on juurdepääs ainult administraatoril, kuid tegelikkuses piirdusid kontrollid juurkasutajale juurdepääsu andmisega, mis ei välistanud sätte muutmist konteineris või administraatoriõigusteta juurkasutaja poolt (CAP_SYS_ADMIN ).

Varem poleks sellist funktsiooni haavatavusena tajutud, kuid olukord on muutunud kasutajanimeruumide (kasutajate nimeruumide) tulekuga, mis võimaldavad konteineritesse luua eraldi juurkasutajaid, mis ei kattu kasutajanimeruumidega. peamine keskkond. Sellest tulenevalt piisab rünnaku jaoks sellest, kui ühendate oma release_agent käitleja konteineris, millel on eraldi kasutaja ID ruumis oma juurkasutaja, mis pärast protsessi lõpetamist käivitatakse põhikeskkonna täielike õigustega.

Vaikimisi ühendatakse cgroupfs konteinerisse kirjutuskaitstud režiimis, kuid pole probleeme selle pseudofailide uuesti ühendamisega kirjutusrežiimis, kui teil on CAP_SYS_ADMIN õigused või luues pesastatud konteineri eraldi kasutajanimeruumiga, kasutades süsteemi jagamise tühistamist, milles Loodud konteineri jaoks on saadaval õigused CAP_SYS_ADMIN.

Haavatavus cgroups v1-s, mis võimaldab põgeneda isoleeritud konteinerist

Rünnaku saab läbi viia, kui teil on isoleeritud konteineris juurõigused või konteineri käivitamisel ilma lipuga no_new_privs, mis keelab täiendavate õiguste hankimise. Süsteemil peab olema lubatud kasutajanimeruumide tugi (vaikimisi lubatud Ubuntus ja Fedoras, kuid mitte aktiveeritud Debianis ja RHEL-is) ning juurdepääs juur-cgroup v1-le (näiteks Docker käitab konteinereid juur-RDMA cgroupis). Rünnak on võimalik ka siis, kui teil on CAP_SYS_ADMIN privileegid. Sel juhul pole kasutajate nimeruumide tugi ja juurdepääs cgroup v1 juurhierarhiale vajalik.

Lisaks isoleeritud konteinerist põgenemisele võimaldab haavatavus ka protsesse, mille käivitab "võimeteta" juurkasutaja või mis tahes kasutaja, kellel on õigused CAP_DAC_OVERRIDE (rünnak nõuab juurdepääsu failile /sys/fs/cgroup/*/release_agent, mis on omanik), et pääseda ligi kõikidele süsteemsetele "võimalustele".

Märgitakse, et haavatavust ei saa kasutada Seccompi, AppArmori või SELinuxi kaitsemehhanismide kasutamisel konteinerite täiendavaks isoleerimiseks, kuna Seccomp blokeerib juurdepääsu süsteemikutsele unshare() ning AppArmor ja SELinux ei luba cgroupf-e kirjutusrežiimis paigaldada.

Allikas: opennet.ru

Lisa kommentaar