SÄrbarhet i cgroups v1 som möjliggör att man kan gÄ ut frÄn en isolerad container

Detaljer om sÄrbarheten (CVE-2022-0492) i implementeringen av resursbegrÀnsningsmekanismen cgroups v1 i Linux-kÀrnan har avslöjats, vilket kan anvÀndas för att ta sig ut frÄn isolerade containrar. Problemet uppstod med Linux-kÀrnan 2.6.24 och har ÄtgÀrdats i kÀrnversionerna 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 och 4.9.301. Man kan följa publiceringen av paketuppdateringar i distributionerna pÄ dessa sidor: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

SÄrbarheten orsakas av en logisk felsökning i hanteraren för release_agent-filer, vilket resulterar i att nödvÀndiga kontroller inte utfördes vid körning av hanteraren med fulla befogenheter. Filen release_agent anvÀnds för att definiera programmet som körs av kÀrnan vid avslutning av en process i cgroup. Detta program körs med root-rÀttigheter och med alla 'capabilities' i root-namespacen. Det var avsett att endast administratörer skulle ha tillgÄng till instÀllningen release_agent, men i praktiken begrÀnsades kontrollerna till att ge root-anvÀndaren Ätkomst, vilket inte uteslöt möjligheten för en anvÀndare att Àndra instÀllningen frÄn containern eller av root-anvÀndare utan administratörsrÀttigheter (CAP_SYS_ADMIN).

Tidigare skulle en sÄdan funktionalitet inte betraktas som en sÄrbarhet, men situationen har förÀndrats med introduktionen av anvÀndarnamnrymder (user namespaces), som möjliggör skapande av separata root-anvÀndare i containrar, vilka inte överlappar med root-anvÀndaren i det huvudsakliga systemet. DÀrför Àr det tillrÀckligt att i en container, som har sin egen root-anvÀndare i en separat anvÀndarnamnrymd, ansluta sin egen release_agent-hanterare, som efter avslutningen av processen kommer att köras med fulla privilegier i den huvudsakliga miljön.

Som standard monteras cgroupfs i containern i skrivskyddat lÀge, men det finns inga problem med att Ätermontera denna pseudofilsystem i skrivlÀge om man har rÀttigheterna CAP_SYS_ADMIN eller genom att skapa en inre container med en separat anvÀndarnamnrymd med systemanropet unshare, dÀr rÀttigheterna CAP_SYS_ADMIN Àr tillgÀngliga för den skapade containern.

SÄrbarhet i cgroups v1 som möjliggör att man kan gÄ ut frÄn en isolerad container

En attack kan utföras med root-behörigheter i en isolerad container eller nÀr containern körs utan flaggan no_new_privs, som förhindrar att ytterligare privilegier erhÄlls. Stödet för anvÀndarnamespaces mÄste vara aktiverat i systemet (som standard aktiverat i Ubuntu och Fedora, men inte aktiverat i Debian och RHEL) och det mÄste finnas tillgÄng till den rotade cgroup v1 (till exempel kör Docker containrar i den rotade RDMA cgroup). En attack Àr ocksÄ möjlig med privilegiet CAP_SYS_ADMIN, i vilket fall stödet för anvÀndarnamespaces och tillgÄng till den rotade cgroup v1-hierarkin inte krÀvs.

Förutom att bryta sig ut ur den isolerade containern tillÄter sÄrbarheten Àven processer som körs av root-anvÀndaren utan "capabilities" eller vilken anvÀndare som helst med rÀttigheterna CAP_DAC_OVERRIDE (för attacken krÀvs tillgÄng till filen /sys/fs/cgroup/*/release_agent, som Àgs av root) att fÄ Ätkomst till alla systemets "capabilities."

Det noteras att sÄrbarheten inte kan utnyttjas nÀr skyddsmekanismer som Seccomp, AppArmor eller SELinux anvÀnds för ytterligare isolering av containrar, eftersom Seccomp blockerar anropet till systemanropet unshare(), och AppArmor samt SELinux tillÄter inte montering av cgroupfs i skrivlÀge.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster