Ranjivost u cgroups v1 koja dopušta bijeg iz izoliranog spremnika

Objavljeni su detalji ranjivosti (CVE-2022-0492) u implementaciji mehanizma ograničavanja resursa cgroups v1 u Linux kernelu, koji se može koristiti za izbjegavanje izoliranih spremnika. Problem je prisutan od Linux kernela 2.6.24 i riješen je u izdanjima kernela 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 i 4.9.301. Objave ažuriranja paketa u distribucijama možete pratiti na ovim stranicama: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

Ranjivost je uzrokovana logičkom pogreškom u rukovatelju datotekom release_agent koji ne uspijeva izvršiti pravilne provjere prilikom pokretanja rukovatelja s punim privilegijama. Datoteka release_agent koristi se za definiranje programa koji će izvršiti kernel kada se prekine proces u cgroup-u. Ovaj program radi kao root i sa svim "mogućnostima" u root imenskom prostoru. Pretpostavljalo se da je samo administrator imao pristup postavci release_agent, ali u stvarnosti su provjere bile ograničene na odobravanje pristupa root korisniku, što nije isključivalo promjenu postavke iz spremnika ili od strane root korisnika bez administratorskih prava (CAP_SYS_ADMIN ).

Ranije se takva značajka ne bi smatrala ranjivošću, ali situacija se promijenila pojavom korisničkih imenskih prostora (korisničkih imenskih prostora), koji vam omogućuju stvaranje zasebnih root korisnika u spremnicima koji se ne preklapaju s root korisnikom glavno okruženje. Sukladno tome, za napad je dovoljno povezati svoj release_agent handler u spremnik koji ima svog root korisnika u zasebnom korisničkom ID prostoru, koji će se nakon završetka procesa izvršiti s punim privilegijama glavnog okruženja.

Prema zadanim postavkama, cgroupfs je montiran u spremnik u načinu samo za čitanje, ali nema problema s ponovnim montiranjem ovog pseudofs-a u načinu pisanja ako imate prava CAP_SYS_ADMIN ili stvaranjem ugniježđenog spremnika s zasebnim korisničkim imenskim prostorom korištenjem unshare sistemskog poziva, u kojem CAP_SYS_ADMIN prava dostupna su za kreirani spremnik.

Ranjivost u cgroups v1 koja dopušta bijeg iz izoliranog spremnika

Napad se može izvesti ako imate root povlastice u izoliranom spremniku ili kada pokrećete spremnik bez oznake no_new_privs, koja zabranjuje dobivanje dodatnih povlastica. Sustav mora imati omogućenu podršku za korisničke imenske prostore (omogućeno prema zadanim postavkama u Ubuntuu i Fedori, ali nije aktivirano u Debianu i RHEL) i imati pristup korijenskoj cgrupi v1 (na primjer, Docker pokreće spremnike u korijenskoj RDMA cgrupi). Napad je također moguć ako imate CAP_SYS_ADMIN privilegije, u kojem slučaju podrška za korisničke prostore imena i pristup cgroup v1 korijenskoj hijerarhiji nisu potrebni.

Osim bijega iz izoliranog spremnika, ranjivost također dopušta procese koje pokreće root korisnik bez "mogućnosti" ili bilo koji korisnik s CAP_DAC_OVERRIDE pravima (napad zahtijeva pristup datoteci /sys/fs/cgroup/*/release_agent, koja je u vlasništvu roota) kako bi dobili pristup svim sistemskim "mogućnostima".

Napominje se da se ranjivost ne može iskoristiti kada se koriste zaštitni mehanizmi Seccomp, AppArmor ili SELinux za dodatnu izolaciju spremnika, budući da Seccomp blokira pristup sistemskom pozivu unshare(), a AppArmor i SELinux ne dopuštaju montiranje cgroupfs u načinu pisanja.

Izvor: opennet.ru

Dodajte komentar