Membongkar Kerentanan Overflow Integer dalam Bahasa Move: Bahaya dalam Verifikasi Bytecode

robot
Pembuatan abstrak sedang berlangsung

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.

Numen Cyber menemukan celah berbahaya lain pada bahasa move

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.

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move

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.

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move

Numen Cyber menemukan kerentanan tinggi lainnya pada bahasa move

Numen Cyber menemukan lagi kerentanan tinggi dalam bahasa move

Numen Cyber menemukan celah berbahaya lainnya dalam bahasa move

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.

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move

Numen Cyber menemukan celah berbahaya lainnya dalam bahasa move

Demonstrasi PoC

Menyediakan kode PoC yang dapat direproduksi, dengan mengatur parameter tertentu dan jumlah variabel lokal, memicu overflow bilangan bulat, yang menyebabkan program crash.

Numen Cyber menemukan kerentanan berbahaya lainnya dalam bahasa move

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move

Numen Cyber menemukan celah berbahaya lainnya di bahasa move

Numen Cyber menemukan celah berbahaya lainnya dalam bahasa move

Numen Cyber menemukan kerentanan tinggi lainnya pada bahasa move

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.

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move secara eksklusif

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
  • 7
  • Bagikan
Komentar
0/400
RektButStillHerevip
· 07-11 04:35
Sudah meluap lagi, tsk tsk.
Lihat AsliBalas0
consensus_failurevip
· 07-11 01:01
Ternyata masih ada bug ini
Lihat AsliBalas0
SchrodingersPapervip
· 07-09 07:32
move sudah mengirim lagi? Bermain terlalu jauh, bermain terlalu jauh.
Lihat AsliBalas0
DevChivevip
· 07-08 16:28
Pemula dimainkan orang untuk disedot
Lihat AsliBalas0
ProposalManiacvip
· 07-08 06:09
Sudah dikatakan bahwa validasi parameter tidak bisa hanya ditulis di dalam dokumen.
Lihat AsliBalas0
DegenWhisperervip
· 07-08 06:07
Overflow sedikit menakutkan, bukan?
Lihat AsliBalas0
ApeWithAPlanvip
· 07-08 05:48
move Ning lagi ada masalah
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)