Risiko Keamanan yang Disebabkan oleh Kebocoran Nilai Sentinel di Mesin Chrome V8
Nilai Sentinel adalah nilai khusus dalam algoritma, sering digunakan sebagai kondisi penghentian dalam algoritma loop atau rekursif. Di dalam sumber kode Chrome terdapat beberapa nilai Sentinel, beberapa objek tidak boleh bocor ke dalam lingkungan JavaScript. Artikel ini akan membahas penggunaan kebocoran objek Uninitialized Oddball untuk menghindari mekanisme HardenProtect di mesin Chrome V8.
Nilai Sentinel di V8
Sebagian besar objek native V8 didefinisikan dalam file v8/src/roots/roots.h, dan objek-objek ini tersusun bersebelahan dalam memori. Setelah objek native yang tidak seharusnya diekspos ke JavaScript bocor, itu dapat menyebabkan eksekusi kode sembarangan di dalam sandbox.
Kita dapat mengekspos Uninitialized Oddball ke dalam JavaScript dengan memodifikasi fungsi native V8. Misalnya, dengan mengubah offset dari fungsi %TheHole() sehingga mengembalikan objek Uninitialized Oddball.
Menghindari Perlindungan HardenType
Dengan memanfaatkan objek Uninitialized Oddball yang bocor, kode berikut dapat dibangun untuk mencapai pembacaan yang relatif sewenang-wenang:
javascript
fungsi read(obj, idx) {
return obj[idx];
}
let arr = [1.1, 2.2, 3.3];
let uninitialized_oddball = %TheHole();
untuk (let i = 0; i < 100000; i++) {
read(arr, 0);
}
%OptimizeFunctionOnNextCall(baca);
let result = read(uninitialized_oddball, 0x12345);
%DebugPrint(result);
Kode perakitan fungsi read yang dioptimalkan menunjukkan bahwa saat menghitung offset array, tidak ada pemeriksaan terhadap tipe nilai obj.prop, dan langsung menghitung sesuai dengan semantik JavaScript, yang mengakibatkan kebingungan tipe dan memungkinkan pembacaan sembarangan.
Saran perbaikan adalah menambahkan pemeriksaan pada array map saat fungsi yang dioptimalkan mengembalikan elemen array, untuk menghindari perhitungan langsung offset yang mengembalikan nilai.
Peringatan Risiko PatchGap
Kerentanan ini saat ini masih belum diperbaiki di beberapa perangkat lunak yang menggunakan versi lama dari mesin V8 ( seperti Skype ). Di platform x86, karena tidak ada kompresi alamat, pembacaan dan penulisan sembarang dapat dilakukan langsung relatif terhadap seluruh proses.
Publikasi metode bypass baru ini mengurangi kesulitan dalam memanfaatkan kerentanan terkait. Hacker hampir tidak perlu penelitian tambahan untuk menyelesaikan eksploitasi penuh terhadap kerentanan Uninitialized Oddball yang bocor.
Ringkasan
Di V8 juga terdapat nilai Sentinel lain, yang mungkin menyebabkan masalah keamanan serupa. Disarankan untuk melakukan penelitian lebih lanjut:
Apakah kebocoran Uninitialized Oddball lainnya juga dapat mewujudkan RCE V8
Apakah masalah semacam ini harus secara resmi dikategorikan sebagai kerentanan keamanan
Apakah dalam pengujian Fuzzer perlu memasukkan nilai Sentinel sebagai variabel?
Bagaimanapun, masalah seperti ini akan sangat memperpendek siklus bagi peretas untuk mencapai pemanfaatan penuh, dan itu sangat penting untuk diperhatikan.
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.
18 Suka
Hadiah
18
6
Bagikan
Komentar
0/400
GateUser-bd883c58
· 08-04 04:05
Kerentanan ini, sangat ekstrem hingga membuat sedikit panik
Lihat AsliBalas0
SerumDegen
· 08-02 17:19
gm fren... ada kebocoran alpha lain yang terdeteksi di v8, kita semua rekt
Lihat AsliBalas0
ThatsNotARugPull
· 08-02 17:19
Kuali ini, Chrome, bawa saja. Mereka sudah menunjukkan lubangnya kepadamu.
Lihat AsliBalas0
RektButStillHere
· 08-02 17:09
Mengapa perlindungan sandbox begitu buruk?
Lihat AsliBalas0
CryptoNomics
· 08-02 17:01
*sigh* eksploitasi lain yang membuktikan analisis regresi saya tentang model keamanan chrome secara statistik signifikan... namun tidak ada yang mendengarkan
Lihat AsliBalas0
MetaverseHobo
· 08-02 16:58
Kekurangan ini terlalu mengganggu, langsung To da moon.
Risiko keamanan kebocoran nilai Sentinel V8 Engine yang melewati HardenProtect
Risiko Keamanan yang Disebabkan oleh Kebocoran Nilai Sentinel di Mesin Chrome V8
Nilai Sentinel adalah nilai khusus dalam algoritma, sering digunakan sebagai kondisi penghentian dalam algoritma loop atau rekursif. Di dalam sumber kode Chrome terdapat beberapa nilai Sentinel, beberapa objek tidak boleh bocor ke dalam lingkungan JavaScript. Artikel ini akan membahas penggunaan kebocoran objek Uninitialized Oddball untuk menghindari mekanisme HardenProtect di mesin Chrome V8.
Nilai Sentinel di V8
Sebagian besar objek native V8 didefinisikan dalam file v8/src/roots/roots.h, dan objek-objek ini tersusun bersebelahan dalam memori. Setelah objek native yang tidak seharusnya diekspos ke JavaScript bocor, itu dapat menyebabkan eksekusi kode sembarangan di dalam sandbox.
Kita dapat mengekspos Uninitialized Oddball ke dalam JavaScript dengan memodifikasi fungsi native V8. Misalnya, dengan mengubah offset dari fungsi %TheHole() sehingga mengembalikan objek Uninitialized Oddball.
Menghindari Perlindungan HardenType
Dengan memanfaatkan objek Uninitialized Oddball yang bocor, kode berikut dapat dibangun untuk mencapai pembacaan yang relatif sewenang-wenang:
javascript fungsi read(obj, idx) { return obj[idx]; }
let arr = [1.1, 2.2, 3.3]; let uninitialized_oddball = %TheHole();
untuk (let i = 0; i < 100000; i++) { read(arr, 0);
}
%OptimizeFunctionOnNextCall(baca);
let result = read(uninitialized_oddball, 0x12345); %DebugPrint(result);
Kode perakitan fungsi read yang dioptimalkan menunjukkan bahwa saat menghitung offset array, tidak ada pemeriksaan terhadap tipe nilai obj.prop, dan langsung menghitung sesuai dengan semantik JavaScript, yang mengakibatkan kebingungan tipe dan memungkinkan pembacaan sembarangan.
Saran perbaikan adalah menambahkan pemeriksaan pada array map saat fungsi yang dioptimalkan mengembalikan elemen array, untuk menghindari perhitungan langsung offset yang mengembalikan nilai.
Peringatan Risiko PatchGap
Kerentanan ini saat ini masih belum diperbaiki di beberapa perangkat lunak yang menggunakan versi lama dari mesin V8 ( seperti Skype ). Di platform x86, karena tidak ada kompresi alamat, pembacaan dan penulisan sembarang dapat dilakukan langsung relatif terhadap seluruh proses.
Publikasi metode bypass baru ini mengurangi kesulitan dalam memanfaatkan kerentanan terkait. Hacker hampir tidak perlu penelitian tambahan untuk menyelesaikan eksploitasi penuh terhadap kerentanan Uninitialized Oddball yang bocor.
Ringkasan
Di V8 juga terdapat nilai Sentinel lain, yang mungkin menyebabkan masalah keamanan serupa. Disarankan untuk melakukan penelitian lebih lanjut:
Bagaimanapun, masalah seperti ini akan sangat memperpendek siklus bagi peretas untuk mencapai pemanfaatan penuh, dan itu sangat penting untuk diperhatikan.