Kerentanan di cgroups v1 yang memungkinkan pelarian dari wadah yang terisolasi

Rincian kerentanan (CVE-2022-0492) dalam implementasi mekanisme pembatasan sumber daya cgroups v1 di kernel Linux, yang dapat digunakan untuk keluar dari container yang terisolasi, telah diungkapkan. Masalahnya telah ada sejak kernel Linux 2.6.24 dan telah diperbaiki pada rilis kernel 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266, dan 4.9.301. Anda dapat mengikuti publikasi pembaruan paket dalam distribusi di halaman ini: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

Kerentanan ini disebabkan oleh kesalahan logika pada pengendali file release_agent yang gagal melakukan pemeriksaan yang tepat ketika menjalankan pengendali dengan hak penuh. File release_agent digunakan untuk mendefinisikan program yang akan dieksekusi oleh kernel ketika suatu proses di cgroup dihentikan. Program ini berjalan sebagai root dan dengan semua β€œkemampuan” di namespace root. Diasumsikan hanya administrator yang memiliki akses ke pengaturan release_agent, namun kenyataannya pemeriksaan hanya sebatas memberikan akses kepada pengguna root, tidak terkecuali pengaturan diubah dari container atau oleh pengguna root tanpa hak administrator (CAP_SYS_ADMIN ).

Sebelumnya, fitur seperti itu tidak akan dianggap sebagai kerentanan, namun situasinya telah berubah dengan munculnya ruang nama pengguna (user namespaces), yang memungkinkan Anda membuat pengguna root terpisah dalam wadah yang tidak tumpang tindih dengan pengguna root dari lingkungan utama. Oleh karena itu, untuk melakukan serangan, cukup menghubungkan handler release_agent Anda ke dalam wadah yang memiliki pengguna root sendiri di ruang ID pengguna terpisah, yang, setelah proses selesai, akan dieksekusi dengan hak istimewa penuh dari lingkungan utama.

Secara default, cgroupfs dipasang di sebuah container dalam mode read-only, namun tidak ada masalah untuk memasang kembali pseudofs ini dalam mode tulis jika Anda memiliki hak CAP_SYS_ADMIN atau dengan membuat container bersarang dengan namespace pengguna terpisah menggunakan panggilan sistem unshare, di mana Hak CAP_SYS_ADMIN tersedia untuk penampung yang dibuat.

Kerentanan di cgroups v1 yang memungkinkan pelarian dari wadah yang terisolasi

Serangan dapat dilakukan jika Anda memiliki hak akses root dalam wadah yang terisolasi atau saat menjalankan wadah tanpa tanda no_new_privs, yang melarang memperoleh hak istimewa tambahan. Sistem harus mengaktifkan dukungan untuk namespace pengguna (diaktifkan secara default di Ubuntu dan Fedora, tetapi tidak diaktifkan di Debian dan RHEL) dan memiliki akses ke root cgroup v1 (misalnya, Docker menjalankan container di cgroup root RDMA). Serangan ini juga mungkin terjadi jika Anda memiliki hak istimewa CAP_SYS_ADMIN, dalam hal ini dukungan untuk namespace pengguna dan akses ke hierarki root cgroup v1 tidak diperlukan.

Selain keluar dari wadah yang terisolasi, kerentanan juga memungkinkan proses diluncurkan oleh pengguna root tanpa "kemampuan" atau pengguna mana pun dengan hak CAP_DAC_OVERRIDE (serangan tersebut memerlukan akses ke file /sys/fs/cgroup/*/release_agent, yaitu dimiliki oleh root) untuk mendapatkan akses ke semua β€œkemampuan” sistem.

Perlu dicatat bahwa kerentanan tidak dapat dieksploitasi saat menggunakan mekanisme perlindungan Seccomp, AppArmor atau SELinux untuk isolasi kontainer tambahan, karena Seccomp memblokir akses ke panggilan sistem unshare(), dan AppArmor dan SELinux tidak mengizinkan pemasangan cgroupf dalam mode tulis.

Sumber: opennet.ru

Tambah komentar