Keadaan perlumbaan dalam pengumpul sampah kernel Linux yang boleh membawa kepada peningkatan keistimewaan

Jann Horn daripada pasukan Google Project Zero, yang pernah mengenal pasti kelemahan Spectre dan Meltdown, menerbitkan teknik untuk mengeksploitasi kelemahan (CVE-2021-4083) dalam pengumpul sampah kernel Linux. Kerentanan ini disebabkan oleh keadaan perlumbaan apabila membersihkan deskriptor fail pada soket unix dan berkemungkinan membenarkan pengguna tempatan yang tidak mempunyai hak untuk melaksanakan kod mereka pada peringkat kernel.

Masalahnya menarik kerana tetingkap masa semasa keadaan perlumbaan berlaku dianggarkan terlalu kecil untuk mencipta eksploitasi sebenar, tetapi pengarang kajian menunjukkan bahawa walaupun kelemahan yang pada mulanya ragu-ragu boleh menjadi sumber serangan sebenar jika pencipta eksploitasi mempunyai kemahiran dan masa yang diperlukan. Yann Horn menunjukkan bagaimana, dengan bantuan manipulasi kerawang, anda boleh mengurangkan keadaan perlumbaan yang berlaku apabila memanggil fungsi close() dan fget() secara serentak ke dalam kerentanan bebas penggunaan yang boleh dieksploitasi sepenuhnya dan mencapai akses kepada data yang telah dibebaskan. struktur di dalam kernel.

Keadaan perlumbaan berlaku semasa proses menutup deskriptor fail sambil memanggil close() dan fget() pada masa yang sama. Panggilan untuk menutup() mungkin berlaku sebelum fget() dilaksanakan, yang akan mengelirukan pengumpul sampah kerana, menurut pengiraan semula, struktur fail tidak akan mempunyai rujukan luaran, tetapi akan kekal dilampirkan pada deskriptor fail, i.e. Pengumpul sampah akan berfikir bahawa ia mempunyai akses eksklusif kepada struktur, tetapi sebenarnya, untuk jangka masa yang singkat, entri yang tinggal dalam jadual deskriptor fail masih akan menunjuk kepada struktur yang dibebaskan.

Untuk meningkatkan kemungkinan memasuki keadaan perlumbaan, beberapa helah telah digunakan, yang memungkinkan untuk meningkatkan kebarangkalian kejayaan eksploitasi kepada 30% apabila memperkenalkan pengoptimuman khusus sistem. Sebagai contoh, untuk meningkatkan masa mengakses struktur dengan deskriptor fail sebanyak beberapa ratus nanosaat, data telah dibuang daripada cache pemproses dengan mengotori cache dengan aktiviti pada teras CPU lain, yang memungkinkan untuk mendapatkan semula struktur daripada memori dan bukannya daripada cache CPU yang pantas.

Ciri penting kedua ialah penggunaan gangguan yang dihasilkan oleh pemasa perkakasan untuk meningkatkan masa keadaan perlumbaan. Momen telah dipilih supaya pengendali gangguan akan menyala apabila keadaan perlumbaan berlaku dan mengganggu pelaksanaan kod untuk beberapa lama. Untuk melambatkan lagi pemulangan kawalan, kira-kira 50 ribu entri dalam baris gilir menunggu telah dijana menggunakan epoll, yang memerlukan carian melalui pengendali gangguan.

Teknik untuk mengeksploitasi kelemahan telah didedahkan selepas tempoh 90 hari tanpa pendedahan. Masalahnya muncul sejak kernel 2.6.32 dan telah ditetapkan pada awal Disember. Pembetulan telah disertakan dalam kernel 5.16 dan juga telah dipindahkan ke cawangan LTS bagi pakej kernel dan kernel yang dibekalkan dalam pengedaran. Perlu diperhatikan bahawa kelemahan telah dikenal pasti semasa analisis masalah serupa CVE-2021-0920, yang menunjukkan dirinya dalam pemungut sampah apabila memproses bendera MSG_PEEK.

Sumber: opennet.ru

Tambah komen