Cenueshmëria në cgroups v1, e cila lejon daljen nga një konteiner të izoluar

Janë zbuluar detajet e një dobësie (CVE-2022-0492) në implementimin e mekanizmit të kufizimit të burimeve cgroups v1 në bërthamën Linux, e cila mund të përdoret për të dalë nga kontejnerët e izoluara. Problemi shfaqet që nga bërthama Linux 2.6.24 dhe është rregulluar në publikimet e bërthamës 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 dhe 4.9.301. Ndërsa për të ndjekur publikimet e azhurnimeve të paketave në shpërndarjet, mund të vizitoni këto faqe: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

Dobësia shkaktohet nga një gabim logjik në përpunuesin e skedarëve release_agent, për shkak të të cilit kontrolli i duhur nuk u ekzekutua kur ekzekutohej përpunuesi me kapacitete të plota. Skedari release_agent përdoret për të përcaktuar programin që ekzekutohet nga bërthama kur përfundon një proces në cgroup. Ky program ekzekutohet me të drejtat root dhe me të gjithë "capabilities" në hapësirën e emrave rrënjësore. Ishte parashikuar që aksesin në konfigurimin e release_agent ta kishte vetëm administrator, por në praktikë kontrolli ishte i kufizuar në dhënien e aksesit përdoruesit root, gjë që nuk përjashtonte ndryshimin e konfigurations nga kontejneri apo nga përdoruesi root pa të drejta administratoriale (CAP_SYS_ADMIN).

Më parë, një karakteristikë e tillë nuk do të merrej si një dobësi, por situata ndryshoi me shfaqjen e hapësirave të emrave të identifikuesve të përdoruesve (user namespaces), të cilat lejojnë krijimin e përdoruesve root të veçantë në kontejnerë, pa u ndërprerë me përdoruesin root të mjedisit kryesor. Për pasojë, për të sulmuar mjafton që në një kontejner, i cili ka për përdorues root një hapësirë identifikuesish të veçantë, të lidhë përpunuesin e vet release_agent, i cili pas përfundimit të procesit do të ekzekutohet me privilegje të plota të mjedisit kryesor.

Në mënyrë që cgroupfs të montuar në kontejner është me leje vetëm për lexim, por nuk ka problem ta rimontoni këtë pseudoFS në mënyrë shkrimi nëse keni të drejtat CAP_SYS_ADMIN ose përmes krijimit me ndihmën e thirrjes sistemike unshare të një kontejneri të brendshëm me një hapësirë të veçantë të përdoruesve, në të cilin për kontejnerin e krijuar janë në dispozicion të drejtat CAP_SYS_ADMIN.

Cenueshmëria në cgroups v1, e cila lejon daljen nga një konteiner të izoluar

Sulmi mund të kryhet nëse ka privilegje root në një konteiner të izoluar ose kur konteineri startohet pa flamurin no_new_privs, i cili ndalon fitimin e privilegjeve të tjera. Në sistem duhet të aktivizohet mbështetje për hapësirat e përdoruesit (çështja është aktivizuar në Ubuntu dhe Fedora, por jo në Debian dhe RHEL) dhe duhet të ketë qasje në cgroup v1 rrënjësor (p.sh., Docker fillon konteinerët në cgroup-in rrënjësor RDMA). Sulmi është gjithashtu i mundur nëse ka privilegje CAP_SYS_ADMIN, në këtë rast mbështetje për hapësirat e përdoruesit dhe qasje në hierarkinë rrënjësore të cgroup v1 nuk është e nevojshme.

Përveç daljes nga një konteiner i izoluar, vulnerabiliteti gjithashtu lejon proceseve, të filluara nga përdoruesi root pa "capabilities" ose nga çdo përdorues me të drejtat CAP_DAC_OVERRIDE (për sulmin kërkohet qasje në skedarin /sys/fs/cgroup/*/release_agent, i cili i përket root), të fitojnë qasje në të gjitha "capabilities" sistematike.

Vërehet se vulnerabiliteti nuk mund të shfrytëzohet nëse aplikohen mekanizmat e mbrojtjes Seccomp, AppArmor ose SELinux për izolim shtesë të konteinerëve, pasi Seccomp bllokon thirrjen në sistem unshare(), ndërsa AppArmor dhe SELinux nuk lejojnë montimin e cgroupfs në modin e shkrimit.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster