Melalui Kebocoran Nilai Sentinel untuk Memotong Proses Perlindungan HardenProtect Chrome V8
Pendahuluan
Nilai sentinel adalah nilai khusus dalam algoritma, sering digunakan dalam algoritma loop atau rekursi sebagai kondisi terminasi. Nilai semacam ini banyak digunakan dalam kode sumber Chrome. Baru-baru ini, peneliti keamanan menemukan bahwa dengan membocorkan objek TheHole, eksekusi kode sembarang dalam sandbox Chrome dapat dicapai. Tim Google kemudian dengan cepat memperbaiki dua kerentanan yang ada di alam liar ini.
Namun, ada objek asli lain di V8 yang seharusnya tidak bocor ke JavaScript. Artikel ini akan membahas objek baru: Uninitialized Oddball. Metode bypass ini pertama kali muncul dalam masalah yang diajukan oleh anggota Project0, dan masih dapat digunakan di versi terbaru V8.
Perlu dicatat bahwa metode ini memiliki universalitas yang kuat:
Dalam CVE-2021-30551, POC pertama adalah kebocoran oddball internal yang tidak diinisialisasi.
POC dari CVE-2022-1486 juga secara langsung membocorkan UninitializedOddball.
Sebuah Issue yang tidak dialokasikan CVE juga menggunakan metode ini.
Kasus-kasus ini cukup untuk menunjukkan pentingnya masalah tersebut, dan layak untuk meninjau kembali perangkat lunak yang mungkin terpengaruh.
Nilai Sentinel di V8
Sebagian besar objek native V8 didefinisikan dalam file v8/src/roots/roots.h, dan mereka disusun berurutan dalam memori. Begitu objek native yang seharusnya tidak bocor ini bocor ke dalam JavaScript, ini dapat menyebabkan eksekusi kode sembarangan di dalam sandbox.
Kita dapat membocorkan Uninitialized Oddball ke JavaScript dengan memodifikasi fungsi native V8. Cara spesifiknya adalah dengan mengubah offset relatif terhadap isolate dalam fungsi %TheHole() sehingga mengembalikan Uninitialized Oddball.
Menghindari HardenType
Menggunakan Uninitialized Oddball dapat mencapai pembacaan dan penulisan yang relatif sembarangan. Kuncinya adalah, fungsi read yang dioptimalkan hanya memeriksa atribut prop dari obj, tetapi tidak memeriksa nilai obj.prop sebagai kunci. Ini mengakibatkan kebingungan tipe saat perhitungan, yang memungkinkan pembacaan sembarangan.
Dalam arsitektur x86, karena tidak ada kompresi alamat, pembacaan dan penulisan sembarang adalah relatif terhadap seluruh proses. Meskipun kehilangan kemudahan yang dibawa oleh kompresi alamat, karena beberapa file perangkat lunak besar cukup besar, masih ada kemungkinan tinggi untuk membaca dan menulis ke konten target.
Peringatan PatchGap
PatchGap kali ini tidak hanya mencakup Issue1352549, tetapi juga mencakup beberapa kerentanan serupa seperti Issue1314616 dan Issue1216437. Setelah metode bypass baru dipublikasikan, tingkat kesulitan untuk mengeksploitasi kerentanan ini sangat menurun. Para peretas hampir tidak perlu melakukan penelitian tambahan untuk menyelesaikan rantai eksploitasi yang lengkap.
Ringkasan
Masih ada banyak nilai Sentinel lainnya di V8, yang mungkin juga memiliki masalah serupa. Ini memberi kita beberapa wawasan:
Apakah kebocoran uninitialized_Oddball lainnya juga bisa mencapai V8 RCE?
Apakah masalah seperti ini harus secara resmi dianggap sebagai masalah keamanan?
Apakah nilai Sentinel harus dimasukkan sebagai variabel dalam pengujian Fuzzer?
Bagaimanapun, masalah seperti ini akan sangat memperpendek periode di mana peretas dapat memanfaatkan sepenuhnya, dan ini layak untuk mendapatkan perhatian besar dari kita.
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.
Kerentanan baru pada mesin Chrome V8: Kebocoran Uninitialized Oddball yang melewati sandbox
Melalui Kebocoran Nilai Sentinel untuk Memotong Proses Perlindungan HardenProtect Chrome V8
Pendahuluan
Nilai sentinel adalah nilai khusus dalam algoritma, sering digunakan dalam algoritma loop atau rekursi sebagai kondisi terminasi. Nilai semacam ini banyak digunakan dalam kode sumber Chrome. Baru-baru ini, peneliti keamanan menemukan bahwa dengan membocorkan objek TheHole, eksekusi kode sembarang dalam sandbox Chrome dapat dicapai. Tim Google kemudian dengan cepat memperbaiki dua kerentanan yang ada di alam liar ini.
Namun, ada objek asli lain di V8 yang seharusnya tidak bocor ke JavaScript. Artikel ini akan membahas objek baru: Uninitialized Oddball. Metode bypass ini pertama kali muncul dalam masalah yang diajukan oleh anggota Project0, dan masih dapat digunakan di versi terbaru V8.
Perlu dicatat bahwa metode ini memiliki universalitas yang kuat:
Dalam CVE-2021-30551, POC pertama adalah kebocoran oddball internal yang tidak diinisialisasi.
POC dari CVE-2022-1486 juga secara langsung membocorkan UninitializedOddball.
Sebuah Issue yang tidak dialokasikan CVE juga menggunakan metode ini.
Kasus-kasus ini cukup untuk menunjukkan pentingnya masalah tersebut, dan layak untuk meninjau kembali perangkat lunak yang mungkin terpengaruh.
Nilai Sentinel di V8
Sebagian besar objek native V8 didefinisikan dalam file v8/src/roots/roots.h, dan mereka disusun berurutan dalam memori. Begitu objek native yang seharusnya tidak bocor ini bocor ke dalam JavaScript, ini dapat menyebabkan eksekusi kode sembarangan di dalam sandbox.
Kita dapat membocorkan Uninitialized Oddball ke JavaScript dengan memodifikasi fungsi native V8. Cara spesifiknya adalah dengan mengubah offset relatif terhadap isolate dalam fungsi %TheHole() sehingga mengembalikan Uninitialized Oddball.
Menghindari HardenType
Menggunakan Uninitialized Oddball dapat mencapai pembacaan dan penulisan yang relatif sembarangan. Kuncinya adalah, fungsi read yang dioptimalkan hanya memeriksa atribut prop dari obj, tetapi tidak memeriksa nilai obj.prop sebagai kunci. Ini mengakibatkan kebingungan tipe saat perhitungan, yang memungkinkan pembacaan sembarangan.
Dalam arsitektur x86, karena tidak ada kompresi alamat, pembacaan dan penulisan sembarang adalah relatif terhadap seluruh proses. Meskipun kehilangan kemudahan yang dibawa oleh kompresi alamat, karena beberapa file perangkat lunak besar cukup besar, masih ada kemungkinan tinggi untuk membaca dan menulis ke konten target.
Peringatan PatchGap
PatchGap kali ini tidak hanya mencakup Issue1352549, tetapi juga mencakup beberapa kerentanan serupa seperti Issue1314616 dan Issue1216437. Setelah metode bypass baru dipublikasikan, tingkat kesulitan untuk mengeksploitasi kerentanan ini sangat menurun. Para peretas hampir tidak perlu melakukan penelitian tambahan untuk menyelesaikan rantai eksploitasi yang lengkap.
Ringkasan
Masih ada banyak nilai Sentinel lainnya di V8, yang mungkin juga memiliki masalah serupa. Ini memberi kita beberapa wawasan:
Apakah kebocoran uninitialized_Oddball lainnya juga bisa mencapai V8 RCE?
Apakah masalah seperti ini harus secara resmi dianggap sebagai masalah keamanan?
Apakah nilai Sentinel harus dimasukkan sebagai variabel dalam pengujian Fuzzer?
Bagaimanapun, masalah seperti ini akan sangat memperpendek periode di mana peretas dapat memanfaatkan sepenuhnya, dan ini layak untuk mendapatkan perhatian besar dari kita.