Edukiontzi isolatu batetik ihes egiteko aukera ematen duen cgroups v1-en ahultasuna

Linux nukleoan cgroups v2022 baliabideak mugatzeko mekanismoa ezartzeko ahultasun baten xehetasunak (CVE-0492-1) ezagutarazi dira, isolatutako edukiontzietatik ihes egiteko erabil daitekeena. Arazoa Linux kerneletik 2.6.24tik dago eta 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 eta 4.9.301 nukleoen bertsioetan konpondu zen. Paketeen eguneratzeen argitalpenak jarrai ditzakezu banaketa orri hauetan: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

Ahultasuna release_agent fitxategi-kudeatzailearen logika-errore baten ondorioz gertatzen da. Ez du egiaztapen egokiak egiten kudeatzailea pribilegio osoekin exekutatzen denean. release_agent fitxategia cgroup bateko prozesu bat amaitzen denean nukleoak exekutatuko duen programa definitzeko erabiltzen da. Programa hau root gisa exekutatzen da eta root izen-espazioko "gaitasun" guztiekin. Suposatzen zen administratzaileak bakarrik zeukala release_agent ezarpenerako sarbidea, baina egia esan, egiaztapenak root erabiltzaileari sarbidea ematera mugatu ziren, eta horrek ez zuen baztertzen edukiontzitik edo root erabiltzaile batek administratzaile eskubiderik gabeko ezarpena aldatzea (CAP_SYS_ADMIN). ).

Aurretik, ezaugarri hori ez zen ahultasun gisa hautemango, baina egoera aldatu egin da erabiltzaileen izen-espazioen (erabiltzaile-izenen espazioak) agerpenarekin batera, erroko erabiltzaile bereiziak sortzeko aukera ematen baitute root erabiltzailearekin gainjartzen ez diren edukiontzietan. ingurune nagusia. Horren arabera, eraso bat egiteko, nahikoa da zure release_agent kudeatzailea bere root erabiltzailea duen edukiontzi batean konektatzea erabiltzailearen ID espazio bereizi batean, eta, prozesua amaitu ondoren, ingurune nagusiaren pribilegio osoekin exekutatu egingo da.

Lehenespenez, cgroupfs irakurtzeko moduko edukiontzi batean muntatzen da, baina ez dago arazorik pseudofs hau idazketa moduan muntatzeko CAP_SYS_ADMIN eskubideak badituzu edo erabiltzaile-izen-espazio bereizi batekin habiaratuta dagoen edukiontzi bat sortuz partekatzeko sistema-deia erabiliz. CAP_SYS_ADMIN eskubideak eskuragarri daude sortutako edukiontzirako.

Edukiontzi isolatu batetik ihes egiteko aukera ematen duen cgroups v1-en ahultasuna

Erasoa edukiontzi isolatu batean erro-pribilegioak badituzu edo no_new_privs banderarik gabeko edukiontzi bat exekutatzen duzunean egin daiteke, eta horrek pribilegio gehigarriak lortzea debekatzen du. Sistemak gaituta izan behar du erabiltzaile-izen-espazioetarako euskarria (lehenespenez gaituta Ubuntu eta Fedora-n, baina ez Debian eta RHEL-en aktibatuta) eta root cgroup v1erako sarbidea izan behar du (adibidez, Docker-ek edukiontziak exekutatzen ditu root RDMA cgroup-en). Erasoa ere posible da CAP_SYS_ADMIN pribilegioak badituzu, eta, kasu horretan, ez dira beharrezkoak erabiltzaileen izen-espazioetarako laguntza eta cgroup v1 root hierarkiarako sarbidea.

Edukiontzi isolatu batetik ihes egiteaz gain, ahultasunak root erabiltzaile batek "gaitasunik" gabe edo CAP_DAC_OVERRIDE eskubiderik duen edozein erabiltzailek abiarazitako prozesuak ere onartzen ditu (erasoa /sys/fs/cgroup/*/release_agent fitxategirako sarbidea behar du, hau da. root-en jabetzakoa) "gaitasun" sistemiko guztietarako sarbidea izateko.

Kontuan izan da ahultasuna ezin dela ustiatu Seccomp, AppArmor edo SELinux babes-mekanismoak edukiontzien isolamendu gehigarrirako erabiltzean, Seccomp-ek unshare() sistema-deirako sarbidea blokeatzen baitu eta AppArmor eta SELinux-ek ez baitute onartzen cgroupf-ak idazteko moduan muntatzen.

Iturria: opennet.ru

Gehitu iruzkin berria