Analisis Nilai Sentinel dalam Mesin Google Chrome V8 dan Potensi Risiko Keamanannya
Nilai Sentinel adalah nilai khusus dalam algoritma, sering digunakan sebagai kondisi penghentian untuk loop atau rekursi. Sumber kode Chrome mengandung beberapa nilai Sentinel, di mana beberapa di antaranya jika bocor ke lingkungan JavaScript dapat menyebabkan masalah keamanan. Artikel ini akan membahas metode untuk memanfaatkan objek Uninitialized Oddball yang bocor untuk melewati mekanisme HardenProtect Chrome V8.
Nilai Sentinel di V8
File roots.h dari sumber kode V8 mendefinisikan banyak objek asli, yang diatur secara berurutan di dalam memori. Jika objek asli yang tidak seharusnya diekspos ke JavaScript bocor, ini dapat menyebabkan pelarian dari sandbox. Kebocoran objek TheHole di masa lalu adalah contoh yang khas.
Untuk memverifikasi masalah di versi terbaru V8, Anda dapat mengubah fungsi %TheHole() untuk mengembalikan objek Uninitialized Oddball:
javascript
print(%DebugPrint(%TheHole()));
// Keluaran: Nilai yang tidak diinisialisasi
Menghindari perlindungan HardenType
Menggunakan Uninitialized Oddball dapat membangun kode PoC berikut untuk mencapai pembacaan sembarangan:
javascript
fungsi read(obj, idx) {
return obj[idx];
}
let uninitialized = %TheHole();
let arr = [1.1];
%SiapkanFungsiUntukOptimasi(baca);
baca(arr, 0);
read(arr, 0);
%OptimizeFunctionOnNextCall(baca);
read(arr, 0);
print(baca(tidak terinisialisasi, 0x1234n));
Fungsi read yang telah dioptimalkan melalui disassembly menunjukkan bahwa ia tidak memeriksa secara ketat tipe Value dari obj.prop, langsung menghitung offset sesuai dengan semantik JavaScript dan mengembalikan elemen array, sehingga menyebabkan kebingungan tipe yang memungkinkan pembacaan sembarang.
Saran perbaikan adalah dengan menambahkan pemeriksaan terhadap array map saat fungsi yang dioptimalkan mengembalikan elemen array, untuk menghindari penghitungan langsung terhadap nilai pengembalian offset.
Peringatan Risiko PatchGap
Analisis menunjukkan bahwa beberapa perangkat lunak seperti Skype mungkin memiliki masalah PatchGap, yang belum diperbaiki. Hacker dapat memanfaatkan kerentanan ini untuk menyelesaikan rantai eksploitasi secara lengkap dalam waktu singkat.
Selain itu, setelah metode bypass baru diumumkan, beberapa kerentanan historis ( seperti Issue1314616 dan Issue1216437) menjadi jauh lebih mudah dieksploitasi. Disarankan agar vendor mengevaluasi ulang risiko keamanan terkait kerentanan tersebut.
Ringkasan
Di V8 masih banyak nilai Sentinel lainnya yang layak untuk diteliti lebih lanjut. Disarankan untuk mempertimbangkan menambahkan %TheHole/Uninitialized_Oddball sebagai variabel dalam Fuzzer, untuk menggali primitif eksploitasi baru. Terlepas dari apakah masalah tersebut secara resmi dianggap sebagai masalah keamanan, hal itu dapat sangat memperpendek siklus eksploitasi penuh para hacker.
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.
Analisis dan Pemanfaatan Kerentanan Nilai Sentinel pada Mesin Chrome V8
Analisis Nilai Sentinel dalam Mesin Google Chrome V8 dan Potensi Risiko Keamanannya
Nilai Sentinel adalah nilai khusus dalam algoritma, sering digunakan sebagai kondisi penghentian untuk loop atau rekursi. Sumber kode Chrome mengandung beberapa nilai Sentinel, di mana beberapa di antaranya jika bocor ke lingkungan JavaScript dapat menyebabkan masalah keamanan. Artikel ini akan membahas metode untuk memanfaatkan objek Uninitialized Oddball yang bocor untuk melewati mekanisme HardenProtect Chrome V8.
Nilai Sentinel di V8
File roots.h dari sumber kode V8 mendefinisikan banyak objek asli, yang diatur secara berurutan di dalam memori. Jika objek asli yang tidak seharusnya diekspos ke JavaScript bocor, ini dapat menyebabkan pelarian dari sandbox. Kebocoran objek TheHole di masa lalu adalah contoh yang khas.
Untuk memverifikasi masalah di versi terbaru V8, Anda dapat mengubah fungsi %TheHole() untuk mengembalikan objek Uninitialized Oddball:
javascript print(%DebugPrint(%TheHole())); // Keluaran: Nilai yang tidak diinisialisasi
Menghindari perlindungan HardenType
Menggunakan Uninitialized Oddball dapat membangun kode PoC berikut untuk mencapai pembacaan sembarangan:
javascript fungsi read(obj, idx) { return obj[idx]; }
let uninitialized = %TheHole(); let arr = [1.1]; %SiapkanFungsiUntukOptimasi(baca); baca(arr, 0); read(arr, 0); %OptimizeFunctionOnNextCall(baca); read(arr, 0);
print(baca(tidak terinisialisasi, 0x1234n));
Fungsi read yang telah dioptimalkan melalui disassembly menunjukkan bahwa ia tidak memeriksa secara ketat tipe Value dari obj.prop, langsung menghitung offset sesuai dengan semantik JavaScript dan mengembalikan elemen array, sehingga menyebabkan kebingungan tipe yang memungkinkan pembacaan sembarang.
Saran perbaikan adalah dengan menambahkan pemeriksaan terhadap array map saat fungsi yang dioptimalkan mengembalikan elemen array, untuk menghindari penghitungan langsung terhadap nilai pengembalian offset.
Peringatan Risiko PatchGap
Analisis menunjukkan bahwa beberapa perangkat lunak seperti Skype mungkin memiliki masalah PatchGap, yang belum diperbaiki. Hacker dapat memanfaatkan kerentanan ini untuk menyelesaikan rantai eksploitasi secara lengkap dalam waktu singkat.
Selain itu, setelah metode bypass baru diumumkan, beberapa kerentanan historis ( seperti Issue1314616 dan Issue1216437) menjadi jauh lebih mudah dieksploitasi. Disarankan agar vendor mengevaluasi ulang risiko keamanan terkait kerentanan tersebut.
Ringkasan
Di V8 masih banyak nilai Sentinel lainnya yang layak untuk diteliti lebih lanjut. Disarankan untuk mempertimbangkan menambahkan %TheHole/Uninitialized_Oddball sebagai variabel dalam Fuzzer, untuk menggali primitif eksploitasi baru. Terlepas dari apakah masalah tersebut secara resmi dianggap sebagai masalah keamanan, hal itu dapat sangat memperpendek siklus eksploitasi penuh para hacker.