Уязвимост в cgroups v1, която позволява излизане от изолиран контейнер.

Разкрити са детайлите на уязвимостта (CVE-2022-0492) в реализацията на механизма за ограничаване на ресурсите cgroups v1 в ядрото на Linux, която може да бъде използвана за излизане от изолирани контейнери. Проблемът се проявява от ядрото на Linux 2.6.24 и е отстранен в изданията на ядрото 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 и 4.9.301. Актуализациите на пакетите в дистрибутивите могат да се проследят на следните страници: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

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

По-рано подобна особеност не би била възприета като уязвимост, но ситуацията се промени с появата на пространства на имената на идентификаторите на потребителите (user namespaces), които позволяват създаването в контейнерите на отделни потребители root, които не се пресичат с потребителя root от основното обкръжение. Следователно, за атака е достатъчно в контейнер с отделен потребител root в различно пространство на идентификаторите на потребителите да се подклучи свой обработчик release_agent, който след завършването на процеса ще бъде изпълнен с пълни привилегии на основното обкръжение.

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

Уязвимост в cgroups v1, която позволява излизане от изолиран контейнер.

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

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

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

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster