Те откриха уязвимост в cgroups v1, която позволява разбиване на изолиран контейнер

Преди няколко дни новината беше пусната подробности са разкрити уязвимост това беше намерено при прилагането на механизма ограничение на ресурсите cgroup v1 в ядрото на Linux, което вече е каталогизирано под CVE-2022-0492.

Тази уязвимост откри se може да се използва за излизане от изолирани контейнери и е подробно описано, че проблемът е налице от Linux kernel 2.6.24.

В публикацията в блога се споменава, че уязвимостта се дължи на логическа грешка в манипулатора на файла release_agent, така че правилните проверки не бяха извършени, когато драйверът беше стартиран с пълни разрешения.

Файлът release_agent се използва за дефиниране на програмата, която ядрото изпълнява когато процес завършва в cgroup. Тази програма работи като root с всички "възможности" в коренното пространство от имена. Само администраторът трябваше да има достъп до конфигурацията на release_agent, но в действителност проверките бяха ограничени до предоставяне на достъп на root потребител, което не изключваше промяната на конфигурацията от контейнера или от неадминистративния root потребител (CAP_SYS_ADMIN ) .

Преди това, тази функция не би била възприета като уязвимост, но ситуацията се промени с появата на пространства за имена на потребителски идентификатори (пространства на потребителски имена), които ви позволяват да създавате отделни root потребители в контейнери, които не се припокриват с root потребител на основната среда.

Съответно, за атака е достатъчно в контейнер, който има собствен root потребител в отделно пространство за потребителски идентификатор, за да включите вашия манипулатор на release_agent, който, след като процесът приключи, ще работи с всички привилегии на родителската среда.

По подразбиране cgroupfs се монтира в контейнер само за четене, но няма проблем с повторното монтиране на тези псевдофази в режим на запис с права CAP_SYS_ADMIN или чрез създаване на вложен контейнер с отделно потребителско пространство от имена с помощта на системното извикване за спиране на споделянето, в което правата на CAP_SYS_ADMIN са достъпни за създадения контейнер.

Атаката може да стане, като имате root привилегии в изолиран контейнер или чрез стартиране на контейнера без флага no_new_privs, което забранява получаването на допълнителни привилегии.

Системата трябва да има активирана поддръжка за пространства от имена потребител (активиран по подразбиране в Ubuntu и Fedora, но не е активиран в Debian и RHEL) и имат достъп до основната cgroup v1 (например, Docker изпълнява контейнери в основната cgroup RDMA). Атаката е възможна и с привилегии CAP_SYS_ADMIN, като в този случай не се изисква поддръжка за потребителски пространства от имена и достъп до основната йерархия на cgroup v1.

В допълнение към излизането от изолирания контейнер, уязвимостта също така позволява процеси, стартирани от root потребител без "способност" или всеки потребител с права CAP_DAC_OVERRIDE (атаката изисква достъп до файла /sys/fs/cgroup/*/release_agent, притежаван от root), за да получите достъп до всички "възможности" на системата.

Освен контейнери, уязвимостта може също да позволи на root хост процеси без възможности или не-root хост процеси с възможността CAP_DAC_OVERRIDE, да ескалират привилегиите до пълни възможности. Това може да позволи на нападателите да заобиколят мярка за втвърдяване, използвана от определени услуги, които премахват способностите в опит да ограничат въздействието, ако възникне компромис.

Unit 42 препоръчва на потребителите да надстроят до фиксирана версия на ядрото. За тези работещи контейнери активирайте Seccomp и се уверете, че AppArmor или SELinux са активирани. Потребителите на Prisma Cloud могат да се обърнат към секцията „Защити в облака на Prisma“, за да видят смекчаванията, предоставени от Prisma Cloud.

Имайте предвид, че уязвимостта не може да бъде използвана при използване на защитни механизми на Seccomp, AppArmor или SELinux за допълнителна изолация на контейнера, тъй като Seccomp блокира системното извикване unshare(), а AppArmor и SELinux не позволяват монтирането на cgroupfs в режим на запис.

И накрая, заслужава да се спомене, че е коригиран във версии на ядрото 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 и 4.9.301. Можете да следите пускането на актуализации на пакети в дистрибуции на тези страници: DebianSUSEUbuntuRHELFedoraGentooArch Linux.

Накрая ако се интересувате да научите повече за това, можете да проверите подробностите в следваща връзка.