Sårbarhet i cgroups v1 som tillater rømning fra en isolert beholder

Detaljer om en sårbarhet (CVE-2022-0492) i implementeringen av cgroups v1-ressursbegrensningsmekanismen i Linux-kjernen, som kan brukes til å unnslippe isolerte beholdere, har blitt avslørt. Problemet har vært tilstede siden Linux-kjernen 2.6.24 og ble løst i kjerneutgivelsene 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 og 4.9.301. Du kan følge publikasjonene av pakkeoppdateringer i distribusjoner på disse sidene: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

Sårbarheten skyldes en logisk feil i release_agent-filbehandleren som ikke klarer å utføre riktige kontroller når behandleren kjøres med fulle rettigheter. Release_agent-filen brukes til å definere programmet som skal kjøres av kjernen når en prosess i en cgroup avsluttes. Dette programmet kjører som root og med alle "funksjoner" i rotnavneområdet. Det ble antatt at bare administratoren hadde tilgang til release_agent-innstillingen, men i realiteten var kontrollene begrenset til å gi tilgang til root-brukeren, noe som ikke utelukket at innstillingen ble endret fra containeren eller av en root-bruker uten administratorrettigheter (CAP_SYS_ADMIN ).

Tidligere ville ikke en slik funksjon ha blitt oppfattet som en sårbarhet, men situasjonen har endret seg med bruken av brukernavnerom (brukernavnerom), som lar deg opprette separate rotbrukere i beholdere som ikke overlapper med rotbrukeren til hovedmiljø. Følgelig, for et angrep, er det nok å koble release_agent-behandleren din i en container som har sin egen root-bruker i et eget bruker-ID-rom, som, etter å ha fullført prosessen, vil bli utført med fulle rettigheter til hovedmiljøet.

Som standard er cgroupfs montert i en beholder i skrivebeskyttet modus, men det er ikke noe problem å remontere disse pseudofene i skrivemodus hvis du har CAP_SYS_ADMIN-rettigheter eller ved å opprette en nestet beholder med et eget brukernavnområde ved å bruke systemkallet for å fjerne deling, der CAP_SYS_ADMIN-rettigheter er tilgjengelige for den opprettede beholderen.

Sårbarhet i cgroups v1 som tillater rømning fra en isolert beholder

Angrepet kan utføres hvis du har root-privilegier i en isolert container eller når du kjører en container uten no_new_privs-flagget, som forbyr å få ytterligere privilegier. Systemet må ha støtte for brukernavneområder aktivert (aktivert som standard i Ubuntu og Fedora, men ikke aktivert i Debian og RHEL) og ha tilgang til rot-cgroup v1 (f.eks. Docker kjører containere i rot-RDMA-cgroup). Angrepet er også mulig hvis du har CAP_SYS_ADMIN-rettigheter, i så fall er det ikke nødvendig med støtte for brukernavneområder og tilgang til cgroup v1-rothierarkiet.

I tillegg til å rømme fra en isolert beholder, tillater sårbarheten også prosesser lansert av en root-bruker uten "capabilities" eller noen bruker med CAP_DAC_OVERRIDE-rettigheter (angrepet krever tilgang til filen /sys/fs/cgroup/*/release_agent, som er eid av root) for å få tilgang til alle systemiske "evner".

Det bemerkes at sårbarheten ikke kan utnyttes ved bruk av Seccomp, AppArmor eller SELinux beskyttelsesmekanismer for ytterligere isolasjon av containere, siden Seccomp blokkerer tilgang til unshare() systemkallet, og AppArmor og SELinux tillater ikke montering av cgroupfs i skrivemodus.

Kilde: opennet.ru

Legg til en kommentar