Meneliti Risiko Keamanan yang Dihasilkan oleh Kebocoran Nilai Sentinel dalam Mesin Chrome V8
Pendahuluan
Nilai sentinel adalah nilai khusus dalam algoritma, biasanya digunakan sebagai kondisi terminasi dalam algoritma loop atau rekursif. Nilai khusus ini banyak digunakan dalam kode sumber Chrome. Baru-baru ini, para peneliti berhasil mengeksploitasi objek TheHole untuk melaksanakan eksekusi kode arbitrer di dalam sandbox untuk CVE-2021-38003 dan CVE-2022-1364. Tim Google segera memperbaiki kedua kerentanan tersebut.
Namun, selain objek TheHole, masih ada objek native lain di V8 yang seharusnya tidak bocor ke JavaScript. Artikel ini akan fokus pada objek Uninitialized Oddball dan memperkenalkan bagaimana cara memanfaatkan ini untuk menghindari mekanisme HardenProtect V8. Perlu dicatat bahwa metode bypass ini masih berlaku untuk versi terbaru V8 dan belum diperbaiki.
Nilai Sentinel di V8
Sebagian besar objek native V8 didefinisikan dalam file v8/src/roots/roots.h, objek-objek ini disusun berurutan di dalam memori. Begitu objek native yang seharusnya tidak bocor ke dalam JavaScript bocor, itu dapat menyebabkan eksekusi kode sembarangan di dalam sandbox.
Untuk memverifikasi hal ini, kita dapat memodifikasi fungsi native V8 untuk membocorkan Uninitialized Oddball ke dalam JavaScript. Cara spesifiknya adalah dengan memodifikasi offset relatif terhadap isolate dalam fungsi %TheHole() agar mengembalikan Uninitialized Oddball.
Menghindari perlindungan HardenType
Menggunakan objek Uninitialized Oddball dapat mencapai pembacaan dan penulisan yang relatif sembarangan. Dalam kode JavaScript yang telah dioptimalkan, fungsi read tidak memeriksa nilai dengan obj.prop sebagai kunci, melainkan langsung menghitung offset sesuai dengan semantik JavaScript untuk mendapatkan nilai array. Ini menyebabkan kebingungan tipe selama perhitungan, sehingga memungkinkan pembacaan sembarangan.
Untuk setiap operasi tulis, dapat merujuk pada metode konstruksi dalam Issue1352549 untuk analisis. Solusi perbaikan yang disarankan adalah menambahkan pemeriksaan pada map array saat fungsi yang dioptimalkan mengembalikan elemen array, untuk menghindari perhitungan langsung offset yang mengembalikan nilai array.
Peringatan PatchGap
Setelah menganalisis Issue1352549, kami menemukan bahwa beberapa perangkat lunak mungkin memiliki masalah PatchGap. Perlu dicatat bahwa hingga saat ini Skype masih belum memperbaiki celah tersebut. Di lingkungan x86, implementasi pembacaan dan penulisan sembarangan akan berbeda, karena tidak ada kompresi alamat, dapat langsung beroperasi relatif terhadap seluruh proses.
Masalah PatchGap kali ini tidak hanya melibatkan Issue1352549, tetapi publikasi metode bypass baru juga secara signifikan mengurangi kesulitan dalam memanfaatkan kerentanan seperti Issue1314616 dan Issue1216437. Penyerang hampir tidak memerlukan biaya penelitian untuk menyelesaikan eksploitasi lengkap dari kerentanan uninitialized_oddball yang sebelumnya.
Ringkasan
Artikel ini secara singkat membahas metode untuk melakukan pembacaan arbitrer melalui kebocoran uninitialized_Oddball dalam nilai Sentinel. Di V8, ada banyak nilai Sentinel lainnya yang juga dapat menyebabkan masalah keamanan serupa. Ini memberi kita wawasan berikut:
Apakah kebocoran uninitialized_Oddball lainnya juga dapat dengan mudah mencapai eksekusi kode jarak jauh V8.
Apakah jenis masalah ini harus dianggap sebagai masalah keamanan resmi masih menjadi perdebatan.
Pertimbangkan untuk menambahkan nilai Sentinel seperti %TheHole/uninitialized_Oddball sebagai variabel dalam fuzzer, untuk menggali pemanfaatan primitif lainnya.
Apakah masalah ini secara resmi dianggap sebagai masalah keamanan atau tidak, mereka akan secara signifikan memperpendek periode bagi peretas untuk memanfaatkan sepenuhnya.
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.
25 Suka
Hadiah
25
6
Bagikan
Komentar
0/400
FUD_Vaccinated
· 07-26 03:20
Lagi-lagi Google, lubang ini terlalu sering muncul.
Lihat AsliBalas0
MetaverseLandlord
· 07-24 11:22
Wah, kerentanan browser orang lain begitu canggih.
Penelitian dan Analisis Risiko Keamanan Kebocoran Nilai Sentinel pada Mesin Chrome V8
Meneliti Risiko Keamanan yang Dihasilkan oleh Kebocoran Nilai Sentinel dalam Mesin Chrome V8
Pendahuluan
Nilai sentinel adalah nilai khusus dalam algoritma, biasanya digunakan sebagai kondisi terminasi dalam algoritma loop atau rekursif. Nilai khusus ini banyak digunakan dalam kode sumber Chrome. Baru-baru ini, para peneliti berhasil mengeksploitasi objek TheHole untuk melaksanakan eksekusi kode arbitrer di dalam sandbox untuk CVE-2021-38003 dan CVE-2022-1364. Tim Google segera memperbaiki kedua kerentanan tersebut.
Namun, selain objek TheHole, masih ada objek native lain di V8 yang seharusnya tidak bocor ke JavaScript. Artikel ini akan fokus pada objek Uninitialized Oddball dan memperkenalkan bagaimana cara memanfaatkan ini untuk menghindari mekanisme HardenProtect V8. Perlu dicatat bahwa metode bypass ini masih berlaku untuk versi terbaru V8 dan belum diperbaiki.
Nilai Sentinel di V8
Sebagian besar objek native V8 didefinisikan dalam file v8/src/roots/roots.h, objek-objek ini disusun berurutan di dalam memori. Begitu objek native yang seharusnya tidak bocor ke dalam JavaScript bocor, itu dapat menyebabkan eksekusi kode sembarangan di dalam sandbox.
Untuk memverifikasi hal ini, kita dapat memodifikasi fungsi native V8 untuk membocorkan Uninitialized Oddball ke dalam JavaScript. Cara spesifiknya adalah dengan memodifikasi offset relatif terhadap isolate dalam fungsi %TheHole() agar mengembalikan Uninitialized Oddball.
Menghindari perlindungan HardenType
Menggunakan objek Uninitialized Oddball dapat mencapai pembacaan dan penulisan yang relatif sembarangan. Dalam kode JavaScript yang telah dioptimalkan, fungsi read tidak memeriksa nilai dengan obj.prop sebagai kunci, melainkan langsung menghitung offset sesuai dengan semantik JavaScript untuk mendapatkan nilai array. Ini menyebabkan kebingungan tipe selama perhitungan, sehingga memungkinkan pembacaan sembarangan.
Untuk setiap operasi tulis, dapat merujuk pada metode konstruksi dalam Issue1352549 untuk analisis. Solusi perbaikan yang disarankan adalah menambahkan pemeriksaan pada map array saat fungsi yang dioptimalkan mengembalikan elemen array, untuk menghindari perhitungan langsung offset yang mengembalikan nilai array.
Peringatan PatchGap
Setelah menganalisis Issue1352549, kami menemukan bahwa beberapa perangkat lunak mungkin memiliki masalah PatchGap. Perlu dicatat bahwa hingga saat ini Skype masih belum memperbaiki celah tersebut. Di lingkungan x86, implementasi pembacaan dan penulisan sembarangan akan berbeda, karena tidak ada kompresi alamat, dapat langsung beroperasi relatif terhadap seluruh proses.
Masalah PatchGap kali ini tidak hanya melibatkan Issue1352549, tetapi publikasi metode bypass baru juga secara signifikan mengurangi kesulitan dalam memanfaatkan kerentanan seperti Issue1314616 dan Issue1216437. Penyerang hampir tidak memerlukan biaya penelitian untuk menyelesaikan eksploitasi lengkap dari kerentanan uninitialized_oddball yang sebelumnya.
Ringkasan
Artikel ini secara singkat membahas metode untuk melakukan pembacaan arbitrer melalui kebocoran uninitialized_Oddball dalam nilai Sentinel. Di V8, ada banyak nilai Sentinel lainnya yang juga dapat menyebabkan masalah keamanan serupa. Ini memberi kita wawasan berikut:
Apakah kebocoran uninitialized_Oddball lainnya juga dapat dengan mudah mencapai eksekusi kode jarak jauh V8.
Apakah jenis masalah ini harus dianggap sebagai masalah keamanan resmi masih menjadi perdebatan.
Pertimbangkan untuk menambahkan nilai Sentinel seperti %TheHole/uninitialized_Oddball sebagai variabel dalam fuzzer, untuk menggali pemanfaatan primitif lainnya.
Apakah masalah ini secara resmi dianggap sebagai masalah keamanan atau tidak, mereka akan secara signifikan memperpendek periode bagi peretas untuk memanfaatkan sepenuhnya.