Analisis Kerentanan Integer Overflow pada Bahasa Move
Setelah melakukan penelitian mendalam tentang bahasa Move, kami menemukan kerentanan overflow integer yang baru. Kerentanan ini muncul pada tahap pemeriksaan keamanan referensi dalam proses verifikasi bytecode bahasa Move. Artikel ini akan menganalisis secara mendetail proses pemicu kerentanan ini dan membahas beberapa konsep inti dari bahasa Move.
Proses Verifikasi Bytecode Move
Bahasa Move melakukan verifikasi kode sebelum mengeksekusi bytecode, yang dibagi menjadi 4 langkah. Kerentanan kali ini terjadi pada langkah reference_safety. Langkah ini bertanggung jawab untuk memverifikasi keamanan referensi, termasuk memeriksa apakah ada referensi yang mengambang, dan apakah akses referensi yang dapat diubah aman.
Proses verifikasi pertama-tama akan mengidentifikasi blok dasar dalam kode. Blok dasar adalah urutan kode yang tidak memiliki instruksi cabang selain titik masuk dan keluar. Move menentukan blok dasar dengan menjelajahi bytecode, mencari semua instruksi cabang dan instruksi loop.
Keamanan Referensi dalam Move
Move mendukung dua jenis referensi: referensi tidak dapat diubah (&) dan referensi dapat diubah (&mut). Modul keamanan referensi akan memindai instruksi bytecode di setiap blok dasar dalam fungsi, untuk memverifikasi bahwa semua operasi referensi adalah sah.
Proses verifikasi menggunakan struktur AbstractState untuk merepresentasikan status, yang mencakup grafik pinjaman dan lokal. Selama verifikasi, status sebelum dan sesudah eksekusi akan dibandingkan dan status blok akan diperbarui.
Analisis Kerentanan
Kekurangan muncul dalam fungsi join_. Fungsi ini digunakan untuk menggabungkan status sebelum dan sesudah eksekusi, memperbarui peta locals dan grafik pinjaman. Masalahnya adalah iterator locals mengembalikan tipe u8, yang akan menyebabkan overflow ketika jumlah panjang parameter dan panjang variabel lokal melebihi 256.
Meskipun Move memiliki proses untuk memverifikasi jumlah locals, itu hanya memverifikasi jumlah variabel lokal dan tidak termasuk panjang parameter.
Eksploitasi Kerentanan
Menggunakan overflow ini dapat mengubah status blok dasar. Dalam kode loop, setiap kali blok dasar dieksekusi, status akan berubah. Saat dieksekusi lagi, jika indeks yang diakses oleh instruksi tidak ada dalam peta locals baru, itu akan menyebabkan panic, sehingga memungkinkan serangan DoS.
Demonstrasi PoC
Menyediakan kode PoC yang dapat direproduksi, dengan mengatur parameter tertentu dan jumlah variabel lokal, memicu overflow bilangan bulat, yang menyebabkan program crash.
Ringkasan
Kekurangan ini sekali lagi membuktikan pentingnya audit kode. Untuk bahasa Move, disarankan untuk menambahkan lebih banyak pemeriksaan keamanan saat runtime, bukan hanya mengandalkan pemeriksaan pada tahap verifikasi. Kami akan terus menyelidiki masalah keamanan bahasa Move dan berkontribusi pada perkembangannya.
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.
25 Suka
Hadiah
25
7
Bagikan
Komentar
0/400
RektButStillHere
· 07-11 04:35
Sudah meluap lagi, tsk tsk.
Lihat AsliBalas0
consensus_failure
· 07-11 01:01
Ternyata masih ada bug ini
Lihat AsliBalas0
SchrodingersPaper
· 07-09 07:32
move sudah mengirim lagi? Bermain terlalu jauh, bermain terlalu jauh.
Lihat AsliBalas0
DevChive
· 07-08 16:28
Pemula dimainkan orang untuk disedot
Lihat AsliBalas0
ProposalManiac
· 07-08 06:09
Sudah dikatakan bahwa validasi parameter tidak bisa hanya ditulis di dalam dokumen.
Membongkar Kerentanan Overflow Integer dalam Bahasa Move: Bahaya dalam Verifikasi Bytecode
Analisis Kerentanan Integer Overflow pada Bahasa Move
Setelah melakukan penelitian mendalam tentang bahasa Move, kami menemukan kerentanan overflow integer yang baru. Kerentanan ini muncul pada tahap pemeriksaan keamanan referensi dalam proses verifikasi bytecode bahasa Move. Artikel ini akan menganalisis secara mendetail proses pemicu kerentanan ini dan membahas beberapa konsep inti dari bahasa Move.
Proses Verifikasi Bytecode Move
Bahasa Move melakukan verifikasi kode sebelum mengeksekusi bytecode, yang dibagi menjadi 4 langkah. Kerentanan kali ini terjadi pada langkah reference_safety. Langkah ini bertanggung jawab untuk memverifikasi keamanan referensi, termasuk memeriksa apakah ada referensi yang mengambang, dan apakah akses referensi yang dapat diubah aman.
Proses verifikasi pertama-tama akan mengidentifikasi blok dasar dalam kode. Blok dasar adalah urutan kode yang tidak memiliki instruksi cabang selain titik masuk dan keluar. Move menentukan blok dasar dengan menjelajahi bytecode, mencari semua instruksi cabang dan instruksi loop.
Keamanan Referensi dalam Move
Move mendukung dua jenis referensi: referensi tidak dapat diubah (&) dan referensi dapat diubah (&mut). Modul keamanan referensi akan memindai instruksi bytecode di setiap blok dasar dalam fungsi, untuk memverifikasi bahwa semua operasi referensi adalah sah.
Proses verifikasi menggunakan struktur AbstractState untuk merepresentasikan status, yang mencakup grafik pinjaman dan lokal. Selama verifikasi, status sebelum dan sesudah eksekusi akan dibandingkan dan status blok akan diperbarui.
Analisis Kerentanan
Kekurangan muncul dalam fungsi join_. Fungsi ini digunakan untuk menggabungkan status sebelum dan sesudah eksekusi, memperbarui peta locals dan grafik pinjaman. Masalahnya adalah iterator locals mengembalikan tipe u8, yang akan menyebabkan overflow ketika jumlah panjang parameter dan panjang variabel lokal melebihi 256.
Meskipun Move memiliki proses untuk memverifikasi jumlah locals, itu hanya memverifikasi jumlah variabel lokal dan tidak termasuk panjang parameter.
Eksploitasi Kerentanan
Menggunakan overflow ini dapat mengubah status blok dasar. Dalam kode loop, setiap kali blok dasar dieksekusi, status akan berubah. Saat dieksekusi lagi, jika indeks yang diakses oleh instruksi tidak ada dalam peta locals baru, itu akan menyebabkan panic, sehingga memungkinkan serangan DoS.
Demonstrasi PoC
Menyediakan kode PoC yang dapat direproduksi, dengan mengatur parameter tertentu dan jumlah variabel lokal, memicu overflow bilangan bulat, yang menyebabkan program crash.
Ringkasan
Kekurangan ini sekali lagi membuktikan pentingnya audit kode. Untuk bahasa Move, disarankan untuk menambahkan lebih banyak pemeriksaan keamanan saat runtime, bukan hanya mengandalkan pemeriksaan pada tahap verifikasi. Kami akan terus menyelidiki masalah keamanan bahasa Move dan berkontribusi pada perkembangannya.