Kerentanan Root di Perangkat Manajemen Paket Snap

Qualys telah mengidentifikasi kerentanan berbahaya ketiga tahun ini (CVE-2022-3328) dalam utilitas snap-confine, yang dilengkapi dengan flag root SUID dan dipanggil oleh proses snapd untuk menciptakan lingkungan yang dapat dieksekusi untuk aplikasi yang didistribusikan dalam paket mandiri dalam format sekejap. Kerentanan ini memungkinkan pengguna lokal yang tidak memiliki hak istimewa untuk mencapai eksekusi kode sebagai root dalam konfigurasi default Ubuntu. Masalah ini diperbaiki pada rilis snapd 2.57.6. Pembaruan paket telah dirilis untuk semua cabang Ubuntu yang didukung.

Menariknya, kerentanan yang dimaksud muncul selama proses perbaikan kerentanan serupa pada bulan Februari di snap-confine. Para peneliti mampu menyiapkan eksploitasi kerja yang menyediakan akses root ke Ubuntu Server 22.04, yang selain kerentanan dalam snap-confine, juga melibatkan dua kerentanan dalam proses multipathd (CVE-2022-41974, CVE-2022-41973) , terkait dengan melewati pemeriksaan otoritas saat transmisi perintah istimewa dan pekerjaan tidak aman dengan tautan simbolik.

Kerentanan dalam snap-confine disebabkan oleh kondisi ras dalam fungsi must_mkdir_and_open_with_perms(), ditambahkan untuk melindungi terhadap substitusi direktori /tmp/snap.$SNAP_NAME dengan tautan simbolis setelah memeriksa pemiliknya, tetapi sebelum memanggil sistem mount panggilan ke direktori bind-mount ke dalamnya untuk paket dalam format snap. Perlindungan tambahannya adalah dengan mengganti nama direktori /tmp/snap.$SNAP_NAME ke direktori lain di /tmp dengan nama acak jika ada dan tidak dimiliki oleh root.

Saat mengeksploitasi operasi penggantian nama direktori /tmp/snap.$SNAP_NAME, para peneliti memanfaatkan fakta bahwa snap-confine juga membuat direktori /tmp/snap.rootfs_XXXXXX untuk root konten paket snap. Bagian "XXXXXX" dari nama dipilih secara acak oleh mkdtemp(), tetapi paket bernama "rootfs_XXXXXX" dapat divalidasi dalam fungsi sc_instance_name_validate (yaitu idenya adalah $SNAP_NAME akan disetel ke "rootfs_XXXXXX" dan kemudian operasi penggantian nama akan mengakibatkan menimpa direktori /tmp/snap.rootfs_XXXXXX dengan root snap).

Untuk mencapai penggunaan /tmp/snap.rootfs_XXXXXX dan penggantian nama /tmp/snap.$SNAP_NAME secara bersamaan, dua contoh snap-confine diluncurkan. Setelah instance pertama dibuat /tmp/snap.rootfs_XXXXXX, prosesnya akan diblokir dan instance kedua akan dimulai dengan nama paket rootfs_XXXXXX, menyebabkan direktori sementara instance kedua /tmp/snap.$SNAP_NAME menjadi direktori root /tmp/snap .rootfs_XXXXXX yang pertama. Segera setelah penggantian nama selesai, instance kedua mogok, dan /tmp/snap.rootfs_XXXXXX diganti dengan manipulasi kondisi balapan, seperti saat mengeksploitasi kerentanan bulan Februari. Setelah substitusi, kunci eksekusi dihapus dari contoh pertama dan penyerang memperoleh kendali penuh atas direktori root snap.

Langkah terakhir adalah membuat symlink /tmp/snap.rootfs_XXXXXX/tmp, yang digunakan oleh fungsi sc_bootstrap_mount_namespace() untuk mengikat-mount direktori nyata yang dapat ditulis /tmp ke direktori mana pun di sistem file, sejak panggilan mount() mengikuti symlink sebelum dipasang. Pemasangan seperti itu diblokir oleh batasan AppArmor, tetapi untuk melewati blok ini, eksploitasi menggunakan dua kerentanan tambahan di multipathd.

Sumber: opennet.ru

Tambah komentar