Təcrid olunmuş konteynerdən çıxmağa imkan verən v1 qruplarında zəiflik

Linux nüvəsinin cgroups v1 resursunu azaltma mexanizmində zəifliyin (CVE-2022-0492) təfərrüatları açıqlanıb. Bu zəiflik təcrid olunmuş konteynerlərdən qaçmaq üçün istifadə edilə bilər. Problem Linux nüvəsi 2.6.24-dən başlayaraq özünü göstərir və 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 və 4.9.301 nüvə buraxılışlarında həll olunub. Siz aşağıdakı səhifələrdə xüsusi paylamalar üçün paket yeniləmə buraxılışlarını izləyə bilərsiniz: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo və Arch Linux.

Zəiflik, işləyicini tam imtiyazlarla işlədən zaman düzgün yoxlamaların qarşısını alan, release_agent fayl işləyicisindəki məntiqi xətadan qaynaqlanır. buraxılış_agent faylı qrup qrupunda proses başa çatdıqda nüvə tərəfindən icra edilən proqramı müəyyən etmək üçün istifadə olunur. Bu proqram kök imtiyazları və kök ad məkanındakı bütün imkanlarla işləyir. Buraxılış_agent konfiqurasiyasına girişin administrator tərəfindən məhdudlaşdırılması nəzərdə tutulurdu, lakin əslində yoxlamalar kök istifadəçiyə girişin verilməsi ilə məhdudlaşırdı ki, bu da konfiqurasiyanın konteyner daxilindən və ya inzibati imtiyazları olmayan (CAP_SYS_ADMIN) kök istifadəçi tərəfindən dəyişdirilməsinə mane olmurdu.

Əvvəllər bu xüsusiyyət zəiflik hesab olunmazdı, lakin əsas mühitin kök istifadəçisi ilə üst-üstə düşməyən konteynerlərdə ayrıca kök istifadəçilərin yaradılmasına imkan verən istifadəçi adlarının meydana gəlməsi ilə vəziyyət dəyişdi. Müvafiq olaraq, hücumu həyata keçirmək üçün ayrıca istifadəçi ad məkanında öz kök istifadəçisi olan konteyner sadəcə olaraq öz release_agent işləyicisini əlavə etməlidir. Proses başa çatdıqdan sonra işləyici əsas mühitin tam imtiyazları ilə icra edəcək.

Varsayılan olaraq, cgroupfs yalnız oxumaq üçün rejimdə konteynerə quraşdırılır, lakin CAP_SYS_ADMIN hüquqlarınız varsa və ya CAP_SYS_ADMIN hüquqlarının yaradılmış konteyner üçün əlçatan olduğu bölüşdürülməmiş sistem çağırışından istifadə edərək ayrıca istifadəçi ad sahəsi ilə iç içə konteyner yaratmaqla bu psevdo-f-ləri yazma rejimində yenidən quraşdırmaqda problem yoxdur.

 Təcrid olunmuş konteynerdən çıxmağa imkan verən v1 qruplarında zəiflik

Hücum təcrid olunmuş konteynerdə kök imtiyazları ilə və ya no_new_privs bayrağı olmadan konteyner işləyərkən həyata keçirilə bilər ki, bu da əlavə imtiyazların qarşısını alır. Sistemdə istifadəçi ad məkanları aktiv olmalıdır (Ubuntu və Fedora-da defolt olaraq aktivdir, lakin Debian və RHEL-də aktiv deyil) və v1 kök cgroup-a giriş (məsələn, Docker kök RDMA qruplarında konteynerləri işlədir). Hücum CAP_SYS_ADMIN imtiyazları ilə də mümkündür, bu halda istifadəçi adları və kök cgroup v1 iyerarxiyasına giriş tələb olunmur.

Təcrid olunmuş konteynerdən qaçmaqla yanaşı, zəiflik həmçinin imkanları olmayan kök istifadəçi və ya CAP_DAC_OVERRIDE imtiyazları olan hər hansı istifadəçi tərəfindən başlatılan proseslərə (hücum kökə məxsus olan /sys/fs/cgroup/*/release_agent faylına giriş tələb edir) bütün sistem imkanlarına çıxış əldə etməyə imkan verir.

Qeyd olunur ki, Seccomp, AppArmor və ya SELinux qoruma mexanizmlərindən əlavə konteyner izolyasiyası üçün istifadə edərkən boşluqdan istifadə etmək mümkün deyil, çünki Seccomp unshare() sistem çağırışına girişi bloklayır, AppArmor və SELinux isə yazma rejimində qrupların quraşdırılmasına icazə vermir.

Mənbə: opennet.ru