Kerentanan root lokal di toolkit manajemen paket Snap

Qualys telah mengidentifikasi dua kerentanan (CVE-2021-44731, CVE-2021-44730) dalam utilitas snap-confine, disertakan dengan flag root SUID dan dipanggil oleh proses snapd untuk menciptakan lingkungan yang dapat dieksekusi untuk aplikasi yang dikirimkan dalam paket mandiri dalam format sekejap. Kerentanan memungkinkan pengguna lokal yang tidak memiliki hak istimewa untuk mengeksekusi kode dengan hak akses root pada sistem. Masalah ini teratasi dalam pembaruan paket snapd hari ini untuk Ubuntu 21.10, 20.04, dan 18.04.

Kerentanan pertama (CVE-2021-44730) memungkinkan serangan melalui manipulasi hard link, tetapi memerlukan penonaktifan perlindungan hard link sistem (mengatur sysctl fs.protected_hardlinks ke 0). Masalah ini disebabkan oleh verifikasi yang salah terhadap lokasi file yang dapat dieksekusi dari program pembantu snap-update-ns dan snap-discard-ns yang dijalankan sebagai root. Jalur ke file-file ini dihitung dalam fungsi sc_open_snapd_tool() berdasarkan jalurnya sendiri dari /proc/self/exe, yang memungkinkan Anda membuat tautan keras ke snap-confine di direktori Anda dan menempatkan versi snap- Anda sendiri perbarui-ns dan snap- utilitas di direktori ini buang-ns. Setelah dijalankan melalui tautan keras, snap-confine dengan hak root akan meluncurkan file snap-update-ns dan snap-discard-ns dari direktori saat ini, digantikan oleh penyerang.

Kerentanan kedua disebabkan oleh kondisi balapan dan dapat dieksploitasi dalam konfigurasi default Desktop Ubuntu. Agar eksploitasi berhasil berhasil di Server Ubuntu, Anda harus memilih salah satu paket dari bagian "Server Snaps Unggulan" saat menginstal. Kondisi balapan terlihat jelas dalam fungsi setup_private_mount() yang dipanggil selama persiapan namespace titik pemasangan untuk paket snap. Fungsi ini membuat direktori sementara β€œ/tmp/snap.$SNAP_NAME/tmp” atau menggunakan direktori yang sudah ada untuk mengikat direktori untuk paket snap ke dalamnya.

Karena nama direktori sementara dapat diprediksi, penyerang dapat mengganti isinya dengan tautan simbolis setelah memeriksa pemiliknya, tetapi sebelum memanggil panggilan sistem mount. Misalnya, Anda dapat membuat symlink "/tmp/snap.lxd/tmp" di direktori /tmp/snap.lxd yang menunjuk ke direktori sembarang, dan panggilan ke mount() akan mengikuti symlink dan memasang direktori di jepret ruang nama. Dengan cara serupa, Anda dapat memasang konten Anda di /var/lib dan, dengan mengganti /var/lib/snapd/mount/snap.snap-store.user-fstab, mengatur pemasangan direktori /etc Anda di namespace paket snap untuk mengatur pemuatan perpustakaan Anda dengan hak root dengan mengganti /etc/ld.so.preload.

Perlu dicatat bahwa membuat eksploitasi ternyata bukanlah tugas yang sepele, karena utilitas snap-confine ditulis dalam Go menggunakan teknik pemrograman yang aman, memiliki perlindungan berdasarkan profil AppArmor, memfilter panggilan sistem berdasarkan mekanisme seccomp, dan menggunakan namespace mount untuk isolasi. Namun, para peneliti dapat menyiapkan eksploitasi yang berfungsi untuk mendapatkan hak root pada sistem. Kode eksploitasi akan dipublikasikan dalam beberapa minggu setelah pengguna menginstal pembaruan yang disediakan.

Sumber: opennet.ru

Tambah komentar