Dobësi në cgroups v1 që lejon ikjen nga një enë e izoluar

Janë zbuluar detaje të një cenueshmërie (CVE-2022-0492) në zbatimin e mekanizmit të kufizimit të burimeve cgroups v1 në kernelin Linux, i cili mund të përdoret për të shpëtuar nga kontejnerët e izoluar. Problemi ka qenë i pranishëm që nga kernel Linux 2.6.24 dhe është rregulluar në versionet e kernelit 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 dhe 4.9.301. Ju mund të ndiqni publikimet e përditësimeve të paketave në shpërndarje në këto faqe: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

Dobësia është për shkak të një gabimi logjik në mbajtësin e skedarit release_agent që nuk arrin të kryejë kontrollet e duhura kur ekzekuton mbajtësin me privilegje të plota. Skedari release_agent përdoret për të përcaktuar programin që do të ekzekutohet nga kerneli kur një proces në një cgroup përfundon. Ky program funksionon si rrënjë dhe me të gjitha "aftësitë" në hapësirën e emrave rrënjë. Supozohej se vetëm administratori kishte akses në cilësimin release_agent, por në realitet kontrollet ishin të kufizuara në dhënien e aksesit për përdoruesit rrënjë, gjë që nuk përjashtonte ndryshimin e cilësimit nga kontejneri ose nga një përdorues rrënjë pa të drejta administratori (CAP_SYS_ADMIN ).

Më parë, një veçori e tillë nuk do të ishte perceptuar si një dobësi, por situata ka ndryshuar me ardhjen e hapësirave të emrave të përdoruesve (hapësirat e emrave të përdoruesit), të cilat ju lejojnë të krijoni përdorues të veçantë rrënjë në kontejnerë që nuk mbivendosen me përdoruesin rrënjë të mjedisi kryesor. Prandaj, për një sulm, mjafton të lidhni mbajtësin tuaj release_agent në një kontejner që ka përdoruesin e tij rrënjë në një hapësirë ​​të veçantë ID të përdoruesit, i cili pas përfundimit të procesit do të ekzekutohet me privilegjet e plota të mjedisit kryesor.

Si parazgjedhje, cgroupfs montohet në një kontejner në modalitetin vetëm për lexim, por nuk ka asnjë problem për t'i rimontuar këto pseudof në modalitetin e shkrimit nëse keni të drejta CAP_SYS_ADMIN ose duke krijuar një kontejnerë të ndërthurur me një hapësirë ​​emri të veçantë përdoruesi duke përdorur thirrjen e sistemit unshare, në të cilin Të drejtat CAP_SYS_ADMIN janë të disponueshme për kontejnerin e krijuar.

Dobësi në cgroups v1 që lejon ikjen nga një enë e izoluar

Sulmi mund të kryhet nëse keni privilegje rrënjësore në një kontejner të izoluar ose kur përdorni një kontejner pa flamurin no_new_privs, i cili ndalon marrjen e privilegjeve shtesë. Sistemi duhet të ketë të aktivizuar mbështetjen për hapësirat e emrave të përdoruesve (të aktivizuar si parazgjedhje në Ubuntu dhe Fedora, por jo të aktivizuar në Debian dhe RHEL) dhe të ketë akses në root cgroup v1 (për shembull, Docker ekzekuton kontejnerë në grupin rrënjë RDMA). Sulmi është gjithashtu i mundur nëse keni privilegje CAP_SYS_ADMIN, në të cilin rast nuk kërkohet mbështetja për hapësirat e emrave të përdoruesve dhe qasja në hierarkinë rrënjësore cgroup v1.

Përveç arratisjes nga një kontejner i izoluar, cenueshmëria gjithashtu lejon proceset e nisura nga një përdorues rrënjë pa "aftësi" ose ndonjë përdorues me të drejta CAP_DAC_OVERRIDE (sulmi kërkon qasje në skedarin /sys/fs/cgroup/*/release_agent, i cili është në pronësi të rrënjës) për të fituar akses në të gjitha "aftësitë" sistematike.

Vihet re se dobësia nuk mund të shfrytëzohet kur përdoren mekanizmat mbrojtës Seccomp, AppArmor ose SELinux për izolim shtesë të kontejnerëve, pasi Seccomp bllokon aksesin në thirrjen e sistemit unshare() dhe AppArmor dhe SELinux nuk lejojnë montimin e cgroupf-ve në modalitetin e shkrimit.

Burimi: opennet.ru

Shto një koment