Daftar Isi
Firecracker dirancang untuk mengisolasi kode yang tidak terpercaya di dalam sebuah microVM. Namun, dalam pengujian celah keamanan CVE-2026-99999 pada penyiapan Firecracker, ditemukan metode untuk keluar dari VM dan mencapai eksekusi kode sebagai root pada host. Bagian kedua dari rangkaian PwnEscape ini melanjutkan pembahasan mengenai penggunaan akses memori host untuk menemukan proses Firecracker dan mengambil alih thread yang sedang berjalan dari dalam mesin tamu.
Memilih Target Pengendalian
Proses pada host mengelola setiap microVM Firecracker, di mana setiap virtual CPU (vCPU) memiliki satu thread di dalam proses tersebut. Thread ini masuk ke KVM untuk menjalankan mesin tamu dan kembali ke Firecracker ketika ada peristiwa yang memerlukan penanganan di ruang pengguna. Saat berada dalam sistem panggilan tersebut, kernel host menyimpan register ruang pengguna dalam struktur yang disebut pt_regs untuk mendeskripsikan thread Firecracker.
Kembalinya thread dari KVM_RUN menjadi sasaran karena penunjuk instruksi dan stack pointer menentukan arah eksekusi berikutnya. Melalui akses memori fisik host yang telah diperoleh sebelumnya dari pemetaan tamu, eksploitasi ini mencari proses Firecracker, menemukan kode yang dapat dipanggil, dan mengidentifikasi kerangka register milik thread vCPU aktif.
Menemukan Halaman Tamu dan Proses Firecracker
Mesin tamu dan host menggunakan alamat fisik yang berbeda, dengan Extended Page Tables (EPT) yang menjembatani keduanya. Eksploitasi menempatkan pola bita atau nonce yang dapat dikenali pada halaman tamu, lalu pencari menyelesaikan alamat fisik host dari halaman tersebut melalui akar EPT. Proses reverse mapper kemudian menelusuri tabel halaman asli host untuk menemukan pemetaan halaman fisik tersebut dan memulihkan direktori global halaman (PGD) milik Firecracker.
Setelah ruang alamat ditemukan, pemeta mengidentifikasi biner Firecracker melalui pembungkus write(2) dan memperhitungkan pengacakan tata letak ruang alamat (ASLR) untuk mendapatkan bias muat. Nilai tersebut memungkinkan pencarian kode yang diperlukan, seperti pembungkus tulis, kelanjutan setelah KVM ioctl, dan urutan xor eax,eax; ret yang diperlukan untuk pemulihan bersih.
Menemukan Kerangka vCPU dan Mengarahkan Ulang Kế Keluaran KVM
Pencari kerangka menggunakan PGD dan bias muat untuk mengenali status tersimpan thread host dengan mencocokkan penunjuk instruksi pada kelanjutan ioctl yang valid. Setelah kerangka register pt_regs ditemukan dan divalidasi melalui pemeriksaan stack serta pemanggilan sistem, muatan sederhana disiapkan dengan menuliskan string N8V23M2n ke stderr milik Firecracker menggunakan tumpukan ruang pengguna pribadi.
Register yang disimpan dimodifikasi agar menunjuk ke alamat pembungkus tulis beserta argumennya. Operasi tulis diprogram agar mengembalikan nilai yang sesuai, diikuti oleh urutan xor eax,eax; ret untuk membersihkan nilai pengembalian sebelum mengeksekusi jalur asli ioctl Firecracker. Operasi tulis tunggal pada port serial tamu memicu thread vCPU untuk keluar dari KVM_RUN, mengembalikan register yang telah dimodifikasi, dan menjalankan instruksi host.
Verifikasi Eksekusi dan Hak Akar pada Host
Penguji menangkap keluaran stderr Firecracker secara terpisah dari mesin tamu, yang memuat string delapan bita secara lengkap. Firecracker tetap berjalan normal, koneksi SSH tamu responsif, dan seluruh kata tumpukan sementara berhasil dipulihkan oleh alat bantu tanpa meninggalkan penanda basi.
Pengujian dijalankan pada Firecracker versi 1.16.1 x86-64 dengan kernel host 7.0.0-1011-aws dan kernel tamu 6.18.44+. Karena Firecracker diluncurkan langsung sebagai root di bawah systemd-run tanpa menggunakan pengurung atau jailer, pemanggilan yang dikendalikan tersebut berhasil dieksekusi sebagai root pada host, sementara konfigurasi produksi dengan pembatasan namespace dan seccomp memerlukan asesmen hak istimewa yang terpisah.
Sumber: Hacker News: Front Page








