Bug 37 Tahun di OpenBSD Berhasil Dieksploitasi

Judul asli: Big Fish: Exploiting a 37-Year-Old Kernel Bug in OpenBSD

Mengapa Ini Penting

Bug lama di kernel BSD membuktikan technical debt bisa jadi vektor eskalasi root nyata.

Peneliti Calif mengeksploitasi bug kernel OpenBSD berusia 37 tahun—integer overflow pada counter 16-bit bertanda—untuk meraih akses root lokal melewati KARL, SMAP, dan SMEP.

Bug ini bermula dari kode BSD orisinal: sebuah counter lampiran shared memory didefinisikan sebagai signed 16-bit short dengan nilai maksimum 32.767. Dengan mem-fork 259 proses setelah memetakan 127 segmen SysV shared memory, counter tersebut melewati batas dan wrap ke nilai negatif -32.643—memicu integer overflow yang berujung pada use-after-free melalui race condition.

Digabungkan dengan out-of-bounds write terpisah di kernel, celah ini membuka jalur eskalasi hak istimewa ke root secara lokal. Calif melaporkan kedua kelemahan ini lebih awal tahun ini, lengkap dengan saran patch. OpenBSD menanganinya melalui errata 026 dan 018.

Proses eksploitasinya terbilang rumit: peneliti melakukan heap grooming menggunakan metrik dari sysctl(KERN_MALLOCSTATS), memanfaatkan IP socket allocation dengan IP_MULTICAST_TTL bernilai 2 untuk mengalokasikan struct ip_moptions 16-byte, lalu memicu penulisan kondisional -1 yang menimpa field membership. Langkah terakhir memodifikasi PTE self-referential mapping dua kali—mengubahnya dari user-accessible menjadi supervisor-accessible—sehingga eksekusi kode kernel tercapai tanpa membutuhkan information disclosure vulnerability.

Calif juga mencatat celah mitigasi: meski KARL mengacak alamat fungsi dan data di kernel binary, allocator memori kernel tetap deterministik sehingga alokasi awal boot mendarat di lokasi yang dapat diprediksi antar-boot pada hardware yang sama.

Sumber

calif.io — Baca artikel asli →