Kerentanan akar tempatan dalam kit alat pengurusan pakej Snap

Qualys telah mengenal pasti dua kelemahan (CVE-2021-44731, CVE-2021-44730) dalam utiliti snap-confine, dibekalkan dengan bendera akar SUID dan dipanggil oleh proses snapd untuk mencipta persekitaran boleh laku untuk aplikasi yang dihantar dalam pakej serba lengkap dalam format snap. Kerentanan membenarkan pengguna tempatan yang tidak mempunyai hak untuk melaksanakan kod dengan keistimewaan root pada sistem. Isu diselesaikan dalam kemas kini pakej snapd hari ini untuk Ubuntu 21.10, 20.04 dan 18.04.

Kerentanan pertama (CVE-2021-44730) membenarkan serangan melalui manipulasi pautan keras, tetapi memerlukan pelumpuhan perlindungan pautan keras sistem (menetapkan sysctl fs.protected_hardlinks kepada 0). Masalahnya disebabkan oleh pengesahan salah lokasi fail boleh laku program pembantu snap-update-ns dan snap-discard-ns yang dijalankan sebagai root. Laluan ke fail ini dikira dalam fungsi sc_open_snapd_tool() berdasarkan laluannya sendiri dari /proc/self/exe, yang membolehkan anda membuat pautan keras untuk snap-confine dalam direktori anda dan meletakkan versi snap- anda sendiri kemas kini-ns dan snap- utiliti dalam direktori ini buang-ns. Selepas berjalan melalui pautan keras, snap-confine dengan hak akar akan melancarkan fail snap-update-ns dan snap-discard-ns daripada direktori semasa, digantikan oleh penyerang.

Kerentanan kedua disebabkan oleh keadaan perlumbaan dan boleh dieksploitasi dalam konfigurasi Desktop Ubuntu lalai. Untuk eksploit berfungsi dengan jayanya dalam Pelayan Ubuntu, anda mesti memilih salah satu pakej daripada bahagian "Snap Pelayan Ditampilkan" semasa memasang. Keadaan perlumbaan jelas dalam fungsi setup_private_mount() yang dipanggil semasa penyediaan ruang nama titik pelekap untuk pakej snap. Fungsi ini mencipta direktori sementara "/tmp/snap.$SNAP_NAME/tmp" atau menggunakan yang sedia ada untuk mengikat direktori untuk pakej snap ke dalamnya.

Memandangkan nama direktori sementara boleh diramal, penyerang boleh menggantikan kandungannya dengan pautan simbolik selepas menyemak pemilik, tetapi sebelum memanggil panggilan sistem pelekap. Sebagai contoh, anda boleh mencipta pautan sym "/tmp/snap.lxd/tmp" dalam direktori /tmp/snap.lxd yang menunjuk ke direktori sewenang-wenangnya dan panggilan ke mount() akan mengikuti symlink dan melekapkan direktori dalam snap ruang nama. Dengan cara yang sama, anda boleh melekapkan kandungan anda dalam /var/lib dan, dengan menggantikan /var/lib/snapd/mount/snap.snap-store.user-fstab, atur pemasangan direktori /etc anda dalam ruang nama pakej snap untuk mengatur pemuatan pustaka anda daripada dengan hak akar dengan menggantikan /etc/ld.so.preload.

Adalah diperhatikan bahawa mencipta eksploitasi ternyata menjadi tugas yang tidak remeh, kerana utiliti snap-confine ditulis dalam Go menggunakan teknik pengaturcaraan selamat, mempunyai perlindungan berdasarkan profil AppArmor, menapis panggilan sistem berdasarkan mekanisme seccomp, dan menggunakan ruang nama pelekap untuk pengasingan. Walau bagaimanapun, para penyelidik dapat menyediakan eksploitasi kerja untuk mendapatkan hak akar pada sistem. Kod eksploitasi akan diterbitkan dalam beberapa minggu selepas pengguna memasang kemas kini yang disediakan.

Sumber: opennet.ru

Tambah komen