Chrome v8 HardenProtect Bypass: Memanfaatkan Sentinel Value untuk Melaksanakan Kode Arbitrer

Nilai Sentinel dan Bypass HardenProtect Chrome v8

Nilai Sentinel adalah nilai khusus dalam algoritma, yang sering digunakan sebagai kondisi akhir untuk algoritma loop atau rekursi. Nilai khusus ini banyak digunakan dalam kode sumber Chrome. Penelitian terbaru menunjukkan bahwa dengan membocorkan objek nilai Sentinel tertentu, dapat dilakukan eksekusi kode arbitrer di dalam sandbox Chrome.

Artikel ini akan membahas metode untuk memanfaatkan objek Uninitialized Oddball untuk melewati mekanisme HardenProtect Chrome v8. Metode ini pertama kali diusulkan oleh anggota Project0 dalam Issue1352549, dan saat ini masih dapat digunakan di versi terbaru V8, Google belum memperbaiki hal ini.

Perlu dicatat bahwa metode ini memiliki universalitas yang kuat:

  1. Issue1216437(CVE-2021-30551) untuk pertama kalinya memberikan poc yang membocorkan internal uninitialized oddball.

  2. Issue1314616(CVE-2022-1486) juga secara langsung mengungkapkan objek UninitializedOddball.

  3. Issue1352549( Tidak ada CVE) yang menunjukkan rantai eksploitasi lengkap dari metode tersebut.

Kasus-kasus ini menunjukkan bahwa metode bypass ini dapat memengaruhi beberapa versi perangkat lunak. Hingga saat ini, perangkat lunak seperti Skype belum memperbaiki kerentanan ini.

Nilai Sentinel di V8

Dalam kode sumber V8, didefinisikan banyak objek bawaan, termasuk berbagai nilai Sentinel. Objek-objek ini disusun berurutan di dalam memori. Begitu objek bawaan yang tidak seharusnya bocor diekspos ke JavaScript, dapat memungkinkan eksekusi kode sembarang di dalam sandbox.

Untuk memverifikasi metode ini, kita dapat memodifikasi fungsi V8 %TheHole() sehingga mengembalikan objek Uninitialized Oddball.

Eksklusif Mengungkap Cara Menghindari Chrome v8 HardenProtect Melalui Kebocoran Sentinel Value

Menghindari HardenType

Kode berikut menunjukkan bagaimana memanfaatkan objek Uninitialized Oddball yang bocor untuk melakukan pembacaan sembarang:

javascript function read(obj, idx) { return obj[idx]; }

let uninitialized_oddball = %GetUninitialized(); let ab = new ArrayBuffer(8); let f64 = new Float64Array(ab); let u32 = new Uint32Array(ab);

untuk (biarkan i = 0; i < 0x10000; i++) { read({prop: 1.1}, 0);
}

%OptimizeFunctionOnNextCall(baca);

let val = read({prop: uninitialized_oddball}, 0x1234); f64[0] = val; console.log(u32[0].toString(16), u32[1].toString(16));

Kode rakitan fungsi read yang dioptimalkan menunjukkan bahwa fungsi hanya memeriksa atribut prop dari obj, tanpa memeriksa nilai obj.prop dan langsung menghitung offset, menyebabkan kebingungan tipe, dan memungkinkan pembacaan sembarang.

Eksklusif Mengungkap Cara Membocorkan Nilai Sentinel untuk Menghindari Chrome v8 HardenProtect

Saran solusi perbaikan: saat fungsi yang dioptimalkan mengembalikan elemen array, tambahkan pemeriksaan terhadap peta array untuk menghindari perhitungan offset langsung.

Eksklusif Mengungkap Cara Menghindari Chrome v8 HardenProtect dengan Membocorkan Sentinel Value

Peringatan PatchGap

Metode bypass ini tidak hanya mempengaruhi kerentanan sejarah, tetapi juga dapat mempengaruhi perangkat lunak saat ini. Misalnya, Skype saat ini belum memperbaiki masalah ini. Di platform x86, karena kurangnya kompresi alamat, rentang baca dan tulis sembarang lebih besar.

PatchGap kali ini tidak hanya berkaitan dengan Issue1352549, tetapi juga secara signifikan mengurangi kesulitan pemanfaatan masalah serupa seperti Issue1314616 dan Issue1216437. Disarankan agar vendor melakukan pemeriksaan menyeluruh terhadap kerentanan terkait.

Eksklusif Mengungkap Cara Melalui Kebocoran Sentinel Value untuk Menghindari Chrome v8 HardenProtect

Ringkasan

Artikel ini memperkenalkan metode untuk melakukan pembacaan sembarang di V8 dengan memanfaatkan Uninitialized Oddball. Di V8 juga terdapat berbagai nilai Sentinel lainnya, yang mungkin memiliki potensi masalah keamanan serupa. Disarankan untuk melakukan penelitian lebih lanjut:

  1. Apakah kebocoran nilai Sentinel lainnya dapat memungkinkan V8 RCE
  2. Tambahkan nilai Sentinel sebagai variabel ke dalam Fuzzer,挖掘新的利用原语
  3. Menghadapi risiko keamanan yang mungkin ditimbulkan oleh masalah semacam ini

Apakah masalah ini secara resmi dianggap sebagai celah keamanan atau tidak, itu dapat secara signifikan memperpendek siklus pemanfaatan penuh oleh peretas. Semoga artikel ini dapat menarik perhatian pihak-pihak terkait.

Eksklusif Mengungkap Cara Melalui Kebocoran Nilai Sentinel Untuk Menghindari Chrome v8 HardenProtect

Eksklusif Mengungkap Cara Menghindari Chrome v8 HardenProtect Melalui Kebocoran Sentinel Value

Eksklusif Mengungkap Cara Memanfaatkan Kebocoran Sentinel Value untuk Menghindari Chrome v8 HardenProtect

Eksklusif Mengungkap Cara Menghindari Chrome v8 HardenProtect Melalui Kebocoran Sentinel Value

Pengungkapan Eksklusif Cara Menghindari Chrome v8 HardenProtect dengan Membocorkan Sentinel Value

SENC-7.49%
Lihat Asli
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.
  • Hadiah
  • 6
  • Posting ulang
  • Bagikan
Komentar
0/400
WinterWarmthCatvip
· 9jam yang lalu
Postingan detail yang kuat harus mendapat dukungan
Lihat AsliBalas0
StakeOrRegretvip
· 08-08 15:35
Kembali menemukan celah di browser.
Lihat AsliBalas0
LayerZeroHerovip
· 08-07 02:24
Sebuah celah yang sedikit keren
Lihat AsliBalas0
Web3ProductManagervip
· 08-07 02:23
Kasus tepi yang sangat berisiko di sini
Lihat AsliBalas0
GhostWalletSleuthvip
· 08-07 02:11
Kekurangan memang sulit untuk dihindari.
Lihat AsliBalas0
UnluckyLemurvip
· 08-07 02:04
Ada banyak kebocoran di sini.
Lihat AsliBalas0
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)