Sentinel Value dalam Chrome V8 dan Potensi Keamanannya
Nilai Sentinel adalah nilai khusus dalam algoritma, sering digunakan sebagai kondisi terminasi untuk algoritma looping atau rekursif. Dalam kode sumber Chrome, terdapat berbagai nilai Sentinel, beberapa di antaranya jika bocor ke lingkungan JavaScript dapat menyebabkan masalah keamanan.
Sebelumnya ada penelitian yang menunjukkan bahwa kebocoran objek TheHole dapat memungkinkan eksekusi kode sembarang di dalam sandbox. Tim Google telah melakukan perbaikan untuk hal ini. Namun, sebenarnya, masih ada objek bawaan lain di V8 yang tidak seharusnya bocor ke JS, seperti objek Uninitialized Oddball.
Kebocoran objek Oddball yang tidak diinisialisasi dapat menyebabkan pelarian dari sandbox. Masalah ini pertama kali muncul di Issue1352549 dan hingga saat ini masih belum diperbaiki. Metode ini memiliki tingkat umum tertentu, dan telah muncul dalam beberapa kerentanan.
Objek bawaan di V8 didefinisikan dalam file v8/src/roots/roots.h, mereka tersusun bersebelahan dalam memori. Setelah objek-objek ini bocor ke lingkungan JavaScript, kemungkinan terjadi pelarian sandbox.
Untuk memverifikasi masalah ini, Anda dapat memodifikasi fungsi native V8 untuk membocorkan Uninitialized Oddball ke dalam JavaScript. Secara spesifik, Anda dapat memodifikasi implementasi fungsi %TheHole().
Menggunakan objek Uninitialized Oddball dapat menghindari perlindungan HardenType. Dengan membangun kode JavaScript tertentu, dapat mencapai pembacaan dan penulisan memori yang relatif sembarangan. Ini disebabkan oleh kode yang dioptimalkan tidak memeriksa atribut objek dengan memadai.
Untuk saran perbaikan, harus ditambahkan pemeriksaan pada map array saat fungsi yang dioptimalkan mengembalikan elemen array, untuk menghindari perhitungan langsung pada offset yang mengembalikan nilai.
Masalah ini juga mengingatkan kita tentang PatchGap, yaitu beberapa perangkat lunak mungkin menggunakan versi V8 yang belum diperbaiki dari kerentanan ini. Misalnya, Skype saat ini masih belum memperbaiki masalah ini. Dalam arsitektur x86, karena tidak ada kompresi alamat, pembacaan dan penulisan sembarang dalam rentang proses dapat dilakukan.
Secara keseluruhan, masih ada berbagai nilai Sentinel di V8 yang mungkin memiliki risiko keamanan serupa. Disarankan untuk melakukan penelitian lebih lanjut tentang dampak kebocoran Uninitialized Oddball lainnya, dan mempertimbangkan untuk memasukkan objek semacam itu dalam ruang lingkup pengujian fuzz untuk menemukan lebih banyak cara pemanfaatan yang berpotensi. Bagaimanapun, masalah semacam ini dapat secara signifikan memperpendek siklus pemanfaatan kerentanan bagi penyerang.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Nilai Sentinel Chrome V8 memiliki risiko keamanan: Kebocoran objek Oddball yang tidak diinisialisasi dapat menyebabkan pelarian dari sandbox
Sentinel Value dalam Chrome V8 dan Potensi Keamanannya
Nilai Sentinel adalah nilai khusus dalam algoritma, sering digunakan sebagai kondisi terminasi untuk algoritma looping atau rekursif. Dalam kode sumber Chrome, terdapat berbagai nilai Sentinel, beberapa di antaranya jika bocor ke lingkungan JavaScript dapat menyebabkan masalah keamanan.
Sebelumnya ada penelitian yang menunjukkan bahwa kebocoran objek TheHole dapat memungkinkan eksekusi kode sembarang di dalam sandbox. Tim Google telah melakukan perbaikan untuk hal ini. Namun, sebenarnya, masih ada objek bawaan lain di V8 yang tidak seharusnya bocor ke JS, seperti objek Uninitialized Oddball.
Kebocoran objek Oddball yang tidak diinisialisasi dapat menyebabkan pelarian dari sandbox. Masalah ini pertama kali muncul di Issue1352549 dan hingga saat ini masih belum diperbaiki. Metode ini memiliki tingkat umum tertentu, dan telah muncul dalam beberapa kerentanan.
Objek bawaan di V8 didefinisikan dalam file v8/src/roots/roots.h, mereka tersusun bersebelahan dalam memori. Setelah objek-objek ini bocor ke lingkungan JavaScript, kemungkinan terjadi pelarian sandbox.
Untuk memverifikasi masalah ini, Anda dapat memodifikasi fungsi native V8 untuk membocorkan Uninitialized Oddball ke dalam JavaScript. Secara spesifik, Anda dapat memodifikasi implementasi fungsi %TheHole().
Menggunakan objek Uninitialized Oddball dapat menghindari perlindungan HardenType. Dengan membangun kode JavaScript tertentu, dapat mencapai pembacaan dan penulisan memori yang relatif sembarangan. Ini disebabkan oleh kode yang dioptimalkan tidak memeriksa atribut objek dengan memadai.
Untuk saran perbaikan, harus ditambahkan pemeriksaan pada map array saat fungsi yang dioptimalkan mengembalikan elemen array, untuk menghindari perhitungan langsung pada offset yang mengembalikan nilai.
Masalah ini juga mengingatkan kita tentang PatchGap, yaitu beberapa perangkat lunak mungkin menggunakan versi V8 yang belum diperbaiki dari kerentanan ini. Misalnya, Skype saat ini masih belum memperbaiki masalah ini. Dalam arsitektur x86, karena tidak ada kompresi alamat, pembacaan dan penulisan sembarang dalam rentang proses dapat dilakukan.
Secara keseluruhan, masih ada berbagai nilai Sentinel di V8 yang mungkin memiliki risiko keamanan serupa. Disarankan untuk melakukan penelitian lebih lanjut tentang dampak kebocoran Uninitialized Oddball lainnya, dan mempertimbangkan untuk memasukkan objek semacam itu dalam ruang lingkup pengujian fuzz untuk menemukan lebih banyak cara pemanfaatan yang berpotensi. Bagaimanapun, masalah semacam ini dapat secara signifikan memperpendek siklus pemanfaatan kerentanan bagi penyerang.