Осебпазирӣ дар 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 барои муайян кардани барномае, ки аз ҷониби ядро ​​​​иҷро мешавад, ҳангоми қатъ шудани раванд дар гурӯҳ истифода мешавад. Ин барнома ҳамчун реша ва бо тамоми "имкониятҳо" дар фазои решавӣ кор мекунад. Тахмин мешуд, ки танҳо администратор ба танзимоти release_agent дастрасӣ дорад, аммо дар асл санҷишҳо бо додани дастрасӣ ба корбари реша маҳдуд буданд, ки ин танзимотро аз контейнер ё корбари реша бе ҳуқуқи администратор (CAP_SYS_ADMIN) тағир намедиҳад. ).

Қаблан, чунин хусусият ҳамчун осебпазирӣ қабул карда намешуд, аммо вазъ бо пайдоиши фазоҳои номи корбар (фазоҳои номи корбар), ки ба шумо имкон медиҳанд, ки корбарони решаи алоҳидаро дар контейнерҳо эҷод кунед, ки бо корбари решаи муҳити асосӣ. Мутаносибан, барои ҳамла, пайваст кардани коркардкунандаи release_agent-и худро дар як контейнер, ки корбари решаи худро дар фазои алоҳидаи ID корбар дорад, кифоя аст, ки пас аз анҷоми раванд бо имтиёзҳои пурраи муҳити асосӣ иҷро карда мешавад.

Бо нобаёнӣ, cgroupfs дар як контейнер дар ҳолати танҳо барои хондан насб карда мешавад, аммо дар ҳолати навиштан аз нав насб кардани ин псевдофҳо мушкиле нест, агар шумо ҳуқуқҳои CAP_SYS_ADMIN дошта бошед ё тавассути сохтани як контейнери лона бо фазои номи корбари алоҳида бо истифода аз занги системаи unshare, ки дар он Ҳуқуқҳои CAP_SYS_ADMIN барои контейнери сохта дастрасанд.

Осебпазирӣ дар cgroups v1, ки имкон медиҳад фирор аз як контейнери ҷудошуда

Ҳамларо метавон анҷом дод, агар шумо имтиёзҳои реша дар як контейнери ҷудогона дошта бошед ё ҳангоми кор кардани контейнер бидуни парчами no_new_privs, ки гирифтани имтиёзҳои иловагиро манъ мекунад. Система бояд фазои номҳои корбарро дастгирӣ кунад (бо нобаёнӣ дар Ubuntu ва Fedora фаъол аст, аммо дар Debian ва RHEL фаъол нашудааст) ва дастрасӣ ба cgroup v1 реша дошта бошад (масалан, Docker контейнерҳоро дар гурӯҳи решаи RDMA кор мекунад). Ҳамла инчунин имконпазир аст, агар шумо имтиёзҳои CAP_SYS_ADMIN дошта бошед, дар ин ҳолат дастгирӣ барои фазоҳои номи корбар ва дастрасӣ ба иерархияи решаи cgroup v1 талаб карда намешавад.

Илова ба фирор аз контейнери ҷудошуда, осебпазирӣ инчунин ба равандҳое, ки корбари решавӣ бидуни "имкониятҳо" ё ягон корбари дорои ҳуқуқи CAP_DAC_OVERRIDE оғоз шудааст, имкон медиҳад (ҳамла дастрасӣ ба файли /sys/fs/cgroup/*/release_agent-ро талаб мекунад, ки ба реша тааллуқ дорад) барои дастрасӣ ба ҳама "имкониятҳои" системавӣ.

Қайд карда мешавад, ки осебпазириро ҳангоми истифодаи механизмҳои муҳофизатии Seccomp, AppArmor ё SELinux барои ҷудокунии иловагии контейнерҳо истифода бурдан мумкин нест, зеро Seccomp дастрасӣ ба занги системаи unshare()-ро маҳкам мекунад ва AppArmor ва SELinux имкон намедиҳад, ки гурӯҳҳо дар ҳолати навиштан насб карда шаванд.

Манбаъ: opennet.ru

Илова Эзоҳ