Ядродогу cgroups v1 ресурстарын чектөө механизмин ишке ашыруудагы алсыздыктын (CVE-2022-0492) чоо-жайы ачыкка чыгарылды. 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 жөндөөсүнө администратор гана кире алат деп болжолдонгон, бирок чындыгында текшерүүлөр түпкү колдонуучуга кирүү мүмкүнчүлүгүн берүү менен чектелди, бул жөндөө контейнерден же администратордук укугу жок түпкү колдонуучу тарабынан өзгөртүлгөнүн жокко чыгарбайт (CAP_SYS_ADMIN ).
Мурда мындай өзгөчөлүк аялуу катары кабыл алынмак эмес, бирок абал колдонуучулардын аттары мейкиндиктеринин (пайдалануучулардын аттары мейкиндиктери) пайда болушу менен өзгөрдү, алар сиз өзүңүздүн түпкү колдонуучу менен дал келбеген контейнерлерде өзүнчө түпкү колдонуучуларды түзүүгө мүмкүндүк берет. негизги чөйрө. Демек, чабуул үчүн, сиздин release_agent иштеткичиңизди өзүнчө колдонуучу ID мейкиндигинде өзүнүн түпкү колдонуучусу бар контейнерге туташтыруу жетиштүү, ал процесс аяктагандан кийин негизги чөйрөнүн толук артыкчылыктары менен аткарылат.
Демейки боюнча, cgroupfs окуу үчүн гана режимде контейнерге орнотулган, бирок CAP_SYS_ADMIN укуктарыңыз бар болсо же бөлүштүрүүнү токтотуу тутум чалуусунун жардамы менен өзүнчө колдонуучу атын мейкиндиги менен уяланган контейнерди түзүү менен бул псевдофторду жазуу режиминде кайра орнотууда көйгөй жок. CAP_SYS_ADMIN укуктары түзүлгөн контейнер үчүн жеткиликтүү.

Чабуул обочолонгон контейнердеги root артыкчылыктары менен же кошумча артыкчылыктардын берилишине жол бербеген no_new_privs желеги жок контейнерди иштеткенде аткарылышы мүмкүн. Колдонуучунун ат мейкиндиктери системада иштетилиши керек (демейки шартта иштетилген) Ubuntu жана Fedora, бирок иштетилген эмес Debian жана RHEL) жана v1 түпкү cgroupко кирүү мүмкүнчүлүгү (мисалы, Docker түпкү RDMA cgroupто контейнерлерди иштетет). Чабуул CAP_SYS_ADMIN артыкчылыктары менен да мүмкүн, бул учурда колдонуучунун аталыш мейкиндигин колдоо жана v1 түпкү cgroup иерархиясына кирүү мүмкүнчүлүгү талап кылынбайт.
Изоляцияланган контейнерден качуудан тышкары, алсыздык "мүмкүнчүлүктөрү" жок түпкү колдонуучу же CAP_DAC_OVERRIDE укуктары бар каалаган колдонуучу тарабынан ишке киргизилген процесстерге жол берет (чабуул /sys/fs/cgroup/*/release_agent файлына кирүү мүмкүнчүлүгүн талап кылат, ал тамырга таандык) бардык системалык "мүмкүнчүлүктөргө" жетүү үчүн.
Seccomp, AppArmor же SE коргоо механизмдерин колдонууда бул алсыздыкты пайдаланууга мүмкүн эместиги белгиленет.Linux контейнерлерди кошумча изоляциялоо үчүн, анткени Seccomp unshare() системалык чакыруусуна чалууну бөгөттөйт жана AppArmor жана SELinux cgroupfs файлдарын жазуу режиминде орнотууга жол бербөө.
Source: opennet.ru
