Analisis Teknis cara melewati Chrome V8 HardenProtect dengan Sentinel Value
Nilai Sentinel adalah nilai khusus dalam algoritma, biasanya ada sebagai kondisi terminasi dalam algoritma loop atau rekursi. Dalam kode sumber Chrome terdapat banyak nilai Sentinel. Penelitian terbaru menunjukkan bahwa dengan membocorkan objek TheHole, dapat dilakukan eksekusi kode arbitrer dalam sandbox untuk CVE-2021-38003 dan CVE-2022-1364. Tim Google kemudian memperbarui kedua kerentanan tersebut.
Selain objek TheHole, ada objek bawaan lain di V8 yang seharusnya tidak diekspos ke JavaScript. Artikel ini membahas objek Uninitialized Oddball, yang metode penghindarannya masih dapat digunakan di versi terbaru V8.
Sebagian besar objek asli V8 didefinisikan dalam file v8/src/roots/roots.h, dan objek-objek ini disusun bersebelahan di dalam memori. Setelah objek asli yang seharusnya tidak bocor bocor ke JavaScript, mungkin dapat merealisasikan eksekusi kode arbitrer di dalam sandbox.
Untuk memverifikasi metode ini, Anda dapat memodifikasi fungsi native V8 untuk membocorkan Uninitialized Oddball ke dalam JavaScript. Secara spesifik, Anda dapat mengubah offset relatif dari fungsi %TheHole() terhadap isolate, sehingga mengembalikan Uninitialized Oddball.
Dengan memanfaatkan Uninitialized Oddball, pembacaan dan penulisan yang relatif sembarangan dapat dicapai. Fungsi read JavaScript yang dioptimalkan akan langsung menghitung offset sesuai dengan semantik JavaScript, mengambil nilai dari array, yang mengarah pada kebingungan tipe, sehingga memungkinkan pembacaan sembarangan.
Saran perbaikan adalah, saat fungsi yang dioptimalkan mengembalikan elemen array, tambahkan pemeriksaan pada map array untuk menghindari perhitungan offset langsung yang mengembalikan nilai array.
Perlu dicatat bahwa metode ini tidak hanya berlaku untuk Chrome, perangkat lunak lain yang menggunakan mesin V8 juga mungkin terpengaruh. Misalnya, Skype saat ini masih belum memperbaiki kerentanan tersebut. Pada x86, karena tidak ada kompresi alamat, pembacaan dan penulisan sembarangan adalah langsung relatif terhadap seluruh proses.
Secara keseluruhan, dengan membocorkan uninitialized_Oddball dalam nilai Sentinel dapat memungkinkan pembacaan primitif secara sembarang. Di V8 ada nilai Sentinel lainnya yang mungkin menyebabkan masalah serupa. Disarankan untuk memasukkan nilai Sentinel ini sebagai variabel ke dalam fuzzer, untuk menggali lebih banyak potensi primitif yang dapat dimanfaatkan. Baik dianggap sebagai masalah keamanan resmi atau tidak, masalah semacam ini akan sangat memperpendek siklus bagi peretas untuk mencapai exploitasi penuh.
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
11 Suka
Hadiah
11
4
Bagikan
Komentar
0/400
TommyTeacher
· 07-20 16:35
Memang agak berbahaya ya.
Lihat AsliBalas0
BrokeBeans
· 07-20 16:22
Sepanjang hari memikirkan menggali lubang, bukankah lebih baik mengerjakan soal dengan tangan?
Analisis dan Pertahanan terhadap Kerentanan Kebocoran Nilai Sentinel di Mesin Chrome V8
Analisis Teknis cara melewati Chrome V8 HardenProtect dengan Sentinel Value
Nilai Sentinel adalah nilai khusus dalam algoritma, biasanya ada sebagai kondisi terminasi dalam algoritma loop atau rekursi. Dalam kode sumber Chrome terdapat banyak nilai Sentinel. Penelitian terbaru menunjukkan bahwa dengan membocorkan objek TheHole, dapat dilakukan eksekusi kode arbitrer dalam sandbox untuk CVE-2021-38003 dan CVE-2022-1364. Tim Google kemudian memperbarui kedua kerentanan tersebut.
Selain objek TheHole, ada objek bawaan lain di V8 yang seharusnya tidak diekspos ke JavaScript. Artikel ini membahas objek Uninitialized Oddball, yang metode penghindarannya masih dapat digunakan di versi terbaru V8.
Sebagian besar objek asli V8 didefinisikan dalam file v8/src/roots/roots.h, dan objek-objek ini disusun bersebelahan di dalam memori. Setelah objek asli yang seharusnya tidak bocor bocor ke JavaScript, mungkin dapat merealisasikan eksekusi kode arbitrer di dalam sandbox.
Untuk memverifikasi metode ini, Anda dapat memodifikasi fungsi native V8 untuk membocorkan Uninitialized Oddball ke dalam JavaScript. Secara spesifik, Anda dapat mengubah offset relatif dari fungsi %TheHole() terhadap isolate, sehingga mengembalikan Uninitialized Oddball.
Dengan memanfaatkan Uninitialized Oddball, pembacaan dan penulisan yang relatif sembarangan dapat dicapai. Fungsi read JavaScript yang dioptimalkan akan langsung menghitung offset sesuai dengan semantik JavaScript, mengambil nilai dari array, yang mengarah pada kebingungan tipe, sehingga memungkinkan pembacaan sembarangan.
Saran perbaikan adalah, saat fungsi yang dioptimalkan mengembalikan elemen array, tambahkan pemeriksaan pada map array untuk menghindari perhitungan offset langsung yang mengembalikan nilai array.
Perlu dicatat bahwa metode ini tidak hanya berlaku untuk Chrome, perangkat lunak lain yang menggunakan mesin V8 juga mungkin terpengaruh. Misalnya, Skype saat ini masih belum memperbaiki kerentanan tersebut. Pada x86, karena tidak ada kompresi alamat, pembacaan dan penulisan sembarangan adalah langsung relatif terhadap seluruh proses.
Secara keseluruhan, dengan membocorkan uninitialized_Oddball dalam nilai Sentinel dapat memungkinkan pembacaan primitif secara sembarang. Di V8 ada nilai Sentinel lainnya yang mungkin menyebabkan masalah serupa. Disarankan untuk memasukkan nilai Sentinel ini sebagai variabel ke dalam fuzzer, untuk menggali lebih banyak potensi primitif yang dapat dimanfaatkan. Baik dianggap sebagai masalah keamanan resmi atau tidak, masalah semacam ini akan sangat memperpendek siklus bagi peretas untuk mencapai exploitasi penuh.