Calif, sebuah perusahaan riset keamanan, telah merilis rincian kerentanan di OpenBSD yang berakar sekitar 37 tahun lalu, hingga ke sumber BSD asli. Penghitung lampiran memori bersama didefinisikan sebagai short 16-bit bertanda. Membuat proses fork berulang kali dengan catatan lampiran memori bersama dapat mendorong penghitung itu melewati nilai maksimumnya, 32.767, sehingga berputar menjadi nilai negatif. Integer overflow ini dapat mengarah ke use-after-free melalui race condition. Digabungkan dengan penulisan out-of-bounds terpisah di kernel, kerentanan ini memungkinkan eskalasi hak akses lokal menjadi root. Masalah ini ditangani dalam errata 026 dan 018.
Peneliti menjelaskan jalur eksploitasi yang berhasil memperoleh root lokal di OpenBSD dengan KARL, SMAP, dan SMEP aktif, tanpa memanfaatkan kerentanan pengungkapan informasi. Metodenya meliputi pemetaan 127 segmen memori bersama System V, pelepasan pemetaannya, dan fork 259 proses untuk membuat penghitung lampiran berputar. Selanjutnya, heap grooming dan race condition digunakan untuk menyelaraskan alokasi, merusak struktur multicast, dan akhirnya memperoleh eksekusi kode kernel dengan menimpa pointer kernel yang dapat diprediksi.
Eksploitasi ini bergantung pada primitif write-what-where: penulisan berasal dari operasi TAILQ_REMOVE, targetnya adalah memori userland yang dibuat dapat diakses mode supervisor, dan lokasinya adalah pointer kernel yang dapat diprediksi. KARL pada OpenBSD mengacak alamat fungsi dan data, tetapi alokator memori kernel tetap deterministik, sehingga beberapa alokasi pada tahap awal boot menjadi target yang andal.
Untuk mengurangi risiko serangan serupa, penulis menyarankan langkah seperti safe-unlinking, yang memeriksa invarian daftar tertaut ganda sebelum melakukan penulisan unlink dan menghentikan proses dengan abort atau panic jika invarian dilanggar. Calif menyatakan bahwa mereka secara rutin melaporkan kerentanan kepada proyek sumber terbuka, sering disertai usulan patch.
Sumber: Hacker News · Diringkas oleh HeadlinesBriefing