Kondisi balapan di pengumpul sampah kernel Linux yang dapat menyebabkan peningkatan hak istimewa

Jann Horn dari tim Google Project Zero, yang pernah mengidentifikasi kerentanan Spectre dan Meltdown, menerbitkan teknik untuk mengeksploitasi kerentanan (CVE-2021-4083) di pengumpul sampah kernel Linux. Kerentanan ini disebabkan oleh kondisi balapan saat membersihkan deskriptor file pada soket unix dan berpotensi memungkinkan pengguna lokal yang tidak memiliki hak istimewa untuk mengeksekusi kode mereka di tingkat kernel.

Permasalahan ini menarik karena jangka waktu terjadinya kondisi balapan diperkirakan terlalu kecil untuk menciptakan eksploitasi nyata, namun penulis penelitian menunjukkan bahwa bahkan kerentanan yang awalnya skeptis dapat menjadi sumber serangan nyata jika pembuat eksploitasi telah melakukannya. keterampilan dan waktu yang diperlukan. Yann Horn menunjukkan bagaimana, dengan bantuan manipulasi kerawang, Anda dapat mengurangi kondisi balapan yang terjadi saat memanggil fungsi close() dan fget() secara bersamaan menjadi kerentanan penggunaan setelah bebas yang sepenuhnya dapat dieksploitasi dan mendapatkan akses ke data yang sudah dibebaskan. struktur di dalam kernel.

Kondisi balapan terjadi selama proses penutupan deskriptor file sambil memanggil close() dan fget() secara bersamaan. Panggilan ke close() dapat terjadi sebelum fget() dijalankan, yang akan membingungkan pengumpul sampah karena, menurut penghitungan ulang, struktur file tidak akan memiliki referensi eksternal, namun akan tetap melekat pada deskriptor file, yaitu. Pengumpul sampah akan berpikir bahwa ia memiliki akses eksklusif ke struktur tersebut, namun kenyataannya, untuk jangka waktu yang singkat, entri yang tersisa di tabel deskriptor file akan tetap mengarah ke struktur yang dibebaskan.

Untuk meningkatkan kemungkinan memasuki kondisi balapan, beberapa trik digunakan, yang memungkinkan untuk meningkatkan kemungkinan keberhasilan eksploitasi hingga 30% ketika memperkenalkan optimasi khusus sistem. Misalnya, untuk meningkatkan waktu mengakses struktur dengan deskriptor file beberapa ratus nanodetik, data dikeluarkan dari cache prosesor dengan mengotori cache dengan aktivitas pada inti CPU lain, yang memungkinkan untuk mengambil struktur dari memori daripada dari dari cache CPU yang cepat.

Fitur penting kedua adalah penggunaan interupsi yang dihasilkan oleh pengatur waktu perangkat keras untuk menambah waktu kondisi balapan. Momen tersebut dipilih agar pengendali interupsi akan aktif ketika kondisi balapan terjadi dan menghentikan eksekusi kode selama beberapa waktu. Untuk lebih menunda kembalinya kendali, sekitar 50 ribu entri dalam antrian tunggu dibuat menggunakan epoll, yang memerlukan pencarian melalui pengendali interupsi.

Teknik untuk mengeksploitasi kerentanan diungkapkan setelah periode non-disclosure selama 90 hari. Masalahnya muncul sejak kernel 2.6.32 dan telah diperbaiki pada awal Desember. Perbaikan ini disertakan dalam kernel 5.16 dan juga ditransfer ke cabang LTS dari paket kernel dan kernel yang disediakan dalam distribusi. Patut dicatat bahwa kerentanan diidentifikasi selama analisis masalah serupa CVE-2021-0920, yang muncul di pengumpul sampah saat memproses tanda MSG_PEEK.

Sumber: opennet.ru

Tambah komentar