Kerentanan dalam cgroups v1 yang membolehkan melarikan diri dari bekas terpencil

Butiran tentang kelemahan (CVE-2022-0492) dalam pelaksanaan mekanisme had sumber cgroups v1 dalam kernel Linux, yang boleh digunakan untuk melarikan diri dari bekas terpencil, telah didedahkan. Masalahnya telah wujud sejak kernel Linux 2.6.24 dan telah dibetulkan dalam keluaran kernel 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266, dan 4.9.301. Anda boleh mengikuti penerbitan kemas kini pakej dalam pengedaran pada halaman ini: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

Kerentanan ini disebabkan oleh ralat logik dalam pengendali fail release_agent yang gagal melakukan pemeriksaan yang betul apabila menjalankan pengendali dengan keistimewaan penuh. Fail release_agent digunakan untuk menentukan program yang akan dilaksanakan oleh kernel apabila proses dalam cgroup ditamatkan. Program ini berjalan sebagai akar dan dengan semua "keupayaan" dalam ruang nama akar. Diandaikan bahawa hanya pentadbir mempunyai akses kepada tetapan release_agent, tetapi pada hakikatnya semakan terhad kepada memberikan akses kepada pengguna root, yang tidak mengecualikan tetapan yang ditukar daripada bekas atau oleh pengguna root tanpa hak pentadbir (CAP_SYS_ADMIN ).

Sebelum ini, ciri sedemikian tidak akan dianggap sebagai kelemahan, tetapi keadaan telah berubah dengan kemunculan ruang nama pengguna (ruang nama pengguna), yang membolehkan anda membuat pengguna akar berasingan dalam bekas yang tidak bertindih dengan pengguna akar persekitaran utama. Sehubungan itu, untuk serangan, cukup untuk menyambungkan pengendali release_agent anda dalam bekas yang mempunyai pengguna akarnya sendiri dalam ruang ID pengguna yang berasingan, yang, selepas menyelesaikan proses, akan dilaksanakan dengan keistimewaan penuh persekitaran utama.

Secara lalai, cgroupfs dipasang dalam bekas dalam mod baca sahaja, tetapi tiada masalah memasang semula pseudofs ini dalam mod tulis jika anda mempunyai hak CAP_SYS_ADMIN atau dengan membuat bekas bersarang dengan ruang nama pengguna yang berasingan menggunakan panggilan sistem nyahkongsi, di mana Hak CAP_SYS_ADMIN tersedia untuk bekas yang dibuat.

Kerentanan dalam cgroups v1 yang membolehkan melarikan diri dari bekas terpencil

Serangan boleh dilakukan jika anda mempunyai keistimewaan root dalam bekas terpencil atau semasa menjalankan bekas tanpa bendera no_new_privs, yang melarang mendapatkan keistimewaan tambahan. Sistem mesti mempunyai sokongan untuk ruang nama pengguna didayakan (didayakan secara lalai dalam Ubuntu dan Fedora, tetapi tidak diaktifkan dalam Debian dan RHEL) dan mempunyai akses kepada cgroup v1 akar (contohnya, Docker menjalankan bekas dalam cgroup RDMA root). Serangan juga boleh dilakukan jika anda mempunyai keistimewaan CAP_SYS_ADMIN, yang mana sokongan untuk ruang nama pengguna dan akses kepada hierarki akar cgroup v1 tidak diperlukan.

Selain melarikan diri dari bekas terpencil, kerentanan juga membenarkan proses yang dilancarkan oleh pengguna akar tanpa "keupayaan" atau mana-mana pengguna dengan hak CAP_DAC_OVERRIDE (serangan memerlukan akses kepada fail /sys/fs/cgroup/*/release_agent, iaitu dimiliki oleh root) untuk mendapatkan akses kepada semua "keupayaan" sistemik.

Adalah diperhatikan bahawa kerentanan tidak boleh dieksploitasi apabila menggunakan mekanisme perlindungan Seccomp, AppArmor atau SELinux untuk pengasingan tambahan bekas, kerana Seccomp menyekat akses kepada panggilan sistem unshare() dan AppArmor dan SELinux tidak membenarkan pemasangan cgroupfs dalam mod tulis.

Sumber: opennet.ru

Tambah komen