Kerentanan di eBPF yang dapat melewati perlindungan serangan Spectre 4

Dua kerentanan telah diidentifikasi di kernel Linux yang memungkinkan subsistem eBPF digunakan untuk melewati perlindungan terhadap serangan Spectre v4 (SSB, Speculative Store Bypass). Dengan menggunakan program BPF yang tidak memiliki hak istimewa, penyerang dapat menciptakan kondisi untuk eksekusi spekulatif dari operasi tertentu dan menentukan konten area memori kernel yang berubah-ubah. Pengelola subsistem eBPF di kernel menerima akses ke prototipe eksploitasi yang menunjukkan kemampuan untuk melakukan serangan dalam praktiknya. Masalah telah diperbaiki dalam bentuk patch (1, 2), yang akan disertakan dalam pembaruan kernel Linux berikutnya. Pembaruan pada kit distribusi belum dibuat (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Metode serangan Spectre 4 didasarkan pada pemulihan data yang disimpan dalam cache prosesor setelah membuang hasil eksekusi operasi spekulatif saat memproses operasi tulis dan baca bergantian menggunakan pengalamatan tidak langsung. Ketika operasi baca mengikuti operasi tulis (misalnya, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), offset alamat baca mungkin sudah diketahui karena operasi serupa sedang dilakukan (operasi baca adalah dilakukan lebih sering dan pembacaan dapat dilakukan dari cache) dan prosesor secara spekulatif dapat melakukan pembacaan sebelum penulisan tanpa menunggu offset tipuan penulisan dihitung.

Jika, setelah menghitung offset, perpotongan area memori untuk menulis dan membaca terdeteksi, prosesor hanya akan membuang hasil pembacaan yang diperoleh secara spekulatif dan mengulangi operasi ini. Fitur ini memungkinkan instruksi baca untuk mengakses nilai lama di beberapa alamat saat operasi penyimpanan belum selesai. Setelah membuang operasi spekulatif yang gagal, jejak eksekusinya tetap ada di cache, setelah itu salah satu metode untuk menentukan isi cache dapat digunakan untuk mengambilnya berdasarkan analisis perubahan waktu akses ke data yang di-cache dan tidak di-cache.

Kerentanan pertama (CVE-2021-35477) disebabkan oleh cacat pada mekanisme verifikasi program BPF. Untuk melindungi terhadap serangan Spectre 4, pemverifikasi menambahkan instruksi tambahan setelah penyimpanan yang berpotensi bermasalah ke memori yang menyimpan nilai null untuk menggantikan jejak operasi sebelumnya. Operasi tulis nol diharapkan sangat cepat dan memblokir eksekusi spekulatif karena hanya bergantung pada penunjuk ke bingkai tumpukan BPF. Namun kenyataannya, ternyata dimungkinkan untuk menciptakan kondisi di mana instruksi yang mengarah ke eksekusi spekulatif berhasil dieksekusi sebelum operasi penyimpanan preemptive.

Kerentanan kedua (CVE-2021-3455) disebabkan oleh fakta bahwa ketika pemverifikasi BPF mengidentifikasi operasi penyimpanan memori yang berpotensi berbahaya, ia tidak memperhitungkan area tumpukan BPF yang tidak diinisialisasi, yang operasi penulisan pertama tidak dilindungi. Fitur ini mengarah pada kemungkinan melakukan operasi pembacaan spekulatif, bergantung pada area memori yang tidak diinisialisasi, sebelum menjalankan instruksi penyimpanan. Memori baru untuk tumpukan BPF dialokasikan tanpa memeriksa konten yang sudah ada di memori yang dialokasikan, dan ada cara sebelum program BPF dijalankan untuk memanipulasi konten wilayah memori yang kemudian akan dialokasikan untuk tumpukan BPF.

Sumber: opennet.ru

Tambah komentar