Menyelami Dampak Keamanan Nilai Sentinel dalam Mesin Chrome V8
Nilai Sentinel adalah nilai khusus dalam algoritma, sering digunakan sebagai kondisi terminasi dalam algoritma loop atau rekursif. Dalam kode sumber Chrome terdapat berbagai nilai Sentinel. Penelitian sebelumnya menunjukkan bahwa dengan membocorkan objek TheHole, dapat mencapai eksekusi kode sembarang dalam sandbox Chrome. Tim Google kemudian memperbaiki kerentanan terkait.
Namun, masih ada objek bawaan lain di V8 yang seharusnya tidak bocor ke JavaScript. Artikel ini akan membahas objek Uninitialized Oddball, yang metode bypass-nya pertama kali muncul di Issue1352549. Perlu dicatat bahwa metode tersebut masih dapat digunakan di versi terbaru V8 dan belum diperbaiki.
Metode ini memiliki tingkat universalitas tertentu:
Issue1216437(CVE-2021-30551) untuk pertama kalinya memberikan poc untuk kebocoran internal uninitialized oddball.
Issue1314616(CVE-2022-1486) juga secara langsung membocorkan UninitializedOddball.
Isu 1352549( No CVE ) memiliki dampak yang patut diperhatikan.
Kasus-kasus ini menunjukkan bahwa kita perlu meninjau kembali perangkat lunak yang mungkin terpengaruh oleh PatchGap. Saat ini Skype masih belum memperbaiki kerentanan tersebut.
Sebagian besar objek asli di V8 didefinisikan dalam file v8/src/roots/roots.h, dan mereka berurutan dalam memori. Begitu objek asli ini yang tidak seharusnya bocor terungkap ke JavaScript, eksekusi kode arbitrer dalam sandbox dapat terjadi.
Untuk memverifikasi metode ini, kita dapat memodifikasi fungsi native V8, untuk membocorkan Uninitialized Oddball ke dalam JavaScript. Secara spesifik, kita dapat memodifikasi offset relatif terhadap isolate dalam fungsi %TheHole() untuk mengembalikan Uninitialized Oddball.
Dengan menggunakan metode ini, Anda dapat melewati perlindungan HardenType, sehingga memungkinkan baca/tulis yang relatif sembarangan. Analisis kode JavaScript yang dioptimalkan menunjukkan bahwa saat memeriksa obj.prop, tidak ada verifikasi terhadap Value yang menggunakan obj.prop sebagai key, dan secara langsung menghitung offset sesuai dengan semantik JavaScript dan mendapatkan nilai array, sehingga menyebabkan kebingungan tipe.
Karena uninitialized_oddball diurutkan lebih awal dan lebih primitif dalam memori V8, lebih mudah untuk dipalsukan dibandingkan dengan objek TheHole. Setelah perbaikan terkait TheHole dilakukan, metode ini menjadi pilihan utama untuk menghindari.
Disarankan untuk menambahkan pemeriksaan pada map array saat fungsi yang dioptimalkan mengembalikan elemen array, untuk menghindari perhitungan offset secara langsung untuk mengembalikan nilai.
Perlu dicatat bahwa Skype saat ini masih belum memperbaiki kerentanan ini. Pada sistem x86, karena tidak ada kompresi alamat, pembacaan dan penulisan sembarang adalah relatif terhadap seluruh proses. Meskipun Skype telah mengaktifkan ASLR, tetapi karena file yang cukup besar, hacker hanya perlu melakukan pembacaan dan penulisan pada alamat tetap, sehingga ada kemungkinan besar untuk membaca dan menulis konten file Skype. Ini sangat mengurangi kesulitan untuk menyelesaikan rantai pemanfaatan yang lengkap.
PatchGap kali ini tidak hanya melibatkan Issue1352549, tetapi juga publikasi metode bypass baru yang secara signifikan mengurangi tingkat kesulitan eksploitasi kerentanan seperti Issue1314616 dan Issue1216437. Hacker hampir tidak perlu melakukan penelitian tambahan untuk sepenuhnya mengeksploitasi kerentanan uninitialized_oddball yang telah bocor sebelumnya.
Di V8 juga terdapat berbagai nilai Sentinel lainnya, yang mungkin memiliki risiko keamanan serupa. Disarankan untuk mempertimbangkan memasukkan nilai Sentinel seperti %TheHole/uninitialized_Oddball sebagai variabel dalam pengujian fuzz, untuk menemukan potensi eksploitasi lainnya.
Apakah masalah ini secara resmi dianggap sebagai masalah keamanan atau tidak, mereka akan secara signifikan memperpendek siklus di mana peretas dapat memanfaatkan sepenuhnya. Kita perlu terus memantau dan meneliti bidang ini untuk meningkatkan keamanan perangkat lunak seperti Chrome.
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.
14 Suka
Hadiah
14
3
Posting ulang
Bagikan
Komentar
0/400
GateUser-00be86fc
· 7jam yang lalu
Wah, v8 telah mengekspos celah kecil lagi.
Lihat AsliBalas0
Blockblind
· 8jam yang lalu
Bug ini dibiarkan begitu lama tanpa diperbaiki juga luar biasa ya
Analisis Mendalam Risiko Keamanan Nilai Sentinel pada Mesin Chrome V8
Menyelami Dampak Keamanan Nilai Sentinel dalam Mesin Chrome V8
Nilai Sentinel adalah nilai khusus dalam algoritma, sering digunakan sebagai kondisi terminasi dalam algoritma loop atau rekursif. Dalam kode sumber Chrome terdapat berbagai nilai Sentinel. Penelitian sebelumnya menunjukkan bahwa dengan membocorkan objek TheHole, dapat mencapai eksekusi kode sembarang dalam sandbox Chrome. Tim Google kemudian memperbaiki kerentanan terkait.
Namun, masih ada objek bawaan lain di V8 yang seharusnya tidak bocor ke JavaScript. Artikel ini akan membahas objek Uninitialized Oddball, yang metode bypass-nya pertama kali muncul di Issue1352549. Perlu dicatat bahwa metode tersebut masih dapat digunakan di versi terbaru V8 dan belum diperbaiki.
Metode ini memiliki tingkat universalitas tertentu:
Issue1216437(CVE-2021-30551) untuk pertama kalinya memberikan poc untuk kebocoran internal uninitialized oddball.
Issue1314616(CVE-2022-1486) juga secara langsung membocorkan UninitializedOddball.
Isu 1352549( No CVE ) memiliki dampak yang patut diperhatikan.
Kasus-kasus ini menunjukkan bahwa kita perlu meninjau kembali perangkat lunak yang mungkin terpengaruh oleh PatchGap. Saat ini Skype masih belum memperbaiki kerentanan tersebut.
Sebagian besar objek asli di V8 didefinisikan dalam file v8/src/roots/roots.h, dan mereka berurutan dalam memori. Begitu objek asli ini yang tidak seharusnya bocor terungkap ke JavaScript, eksekusi kode arbitrer dalam sandbox dapat terjadi.
Untuk memverifikasi metode ini, kita dapat memodifikasi fungsi native V8, untuk membocorkan Uninitialized Oddball ke dalam JavaScript. Secara spesifik, kita dapat memodifikasi offset relatif terhadap isolate dalam fungsi %TheHole() untuk mengembalikan Uninitialized Oddball.
Dengan menggunakan metode ini, Anda dapat melewati perlindungan HardenType, sehingga memungkinkan baca/tulis yang relatif sembarangan. Analisis kode JavaScript yang dioptimalkan menunjukkan bahwa saat memeriksa obj.prop, tidak ada verifikasi terhadap Value yang menggunakan obj.prop sebagai key, dan secara langsung menghitung offset sesuai dengan semantik JavaScript dan mendapatkan nilai array, sehingga menyebabkan kebingungan tipe.
Karena uninitialized_oddball diurutkan lebih awal dan lebih primitif dalam memori V8, lebih mudah untuk dipalsukan dibandingkan dengan objek TheHole. Setelah perbaikan terkait TheHole dilakukan, metode ini menjadi pilihan utama untuk menghindari.
Disarankan untuk menambahkan pemeriksaan pada map array saat fungsi yang dioptimalkan mengembalikan elemen array, untuk menghindari perhitungan offset secara langsung untuk mengembalikan nilai.
Perlu dicatat bahwa Skype saat ini masih belum memperbaiki kerentanan ini. Pada sistem x86, karena tidak ada kompresi alamat, pembacaan dan penulisan sembarang adalah relatif terhadap seluruh proses. Meskipun Skype telah mengaktifkan ASLR, tetapi karena file yang cukup besar, hacker hanya perlu melakukan pembacaan dan penulisan pada alamat tetap, sehingga ada kemungkinan besar untuk membaca dan menulis konten file Skype. Ini sangat mengurangi kesulitan untuk menyelesaikan rantai pemanfaatan yang lengkap.
PatchGap kali ini tidak hanya melibatkan Issue1352549, tetapi juga publikasi metode bypass baru yang secara signifikan mengurangi tingkat kesulitan eksploitasi kerentanan seperti Issue1314616 dan Issue1216437. Hacker hampir tidak perlu melakukan penelitian tambahan untuk sepenuhnya mengeksploitasi kerentanan uninitialized_oddball yang telah bocor sebelumnya.
Di V8 juga terdapat berbagai nilai Sentinel lainnya, yang mungkin memiliki risiko keamanan serupa. Disarankan untuk mempertimbangkan memasukkan nilai Sentinel seperti %TheHole/uninitialized_Oddball sebagai variabel dalam pengujian fuzz, untuk menemukan potensi eksploitasi lainnya.
Apakah masalah ini secara resmi dianggap sebagai masalah keamanan atau tidak, mereka akan secara signifikan memperpendek siklus di mana peretas dapat memanfaatkan sepenuhnya. Kita perlu terus memantau dan meneliti bidang ini untuk meningkatkan keamanan perangkat lunak seperti Chrome.