Analisis Kerentanan Overflow Integer dalam Verifikasi Keamanan Referensi Bahasa Move

robot
Pembuatan abstrak sedang berlangsung

Analisis Kerentanan Overflow Bilangan Bulat dalam Verifikasi Keamanan Referensi Bahasa Move

Baru-baru ini, para peneliti menemukan kerentanan integer overflow baru saat melakukan analisis mendalam terhadap Aptos Moveevm. Kerentanan ini ada dalam proses verifikasi keamanan referensi bahasa Move, yang secara khusus melibatkan langkah reference_safety. Artikel ini akan membahas secara mendalam kerentanan ini dan menjelaskan proses pemicunya serta potensi dampaknya.

Numen Cyber menemukan celah berbahaya lainnya dalam bahasa move

Proses Verifikasi Bahasa Move

Bahasa Move melakukan verifikasi unit kode sebelum mengeksekusi bytecode, yang terdiri dari 4 langkah. Kerentanan yang ditemukan kali ini terjadi pada langkah reference_safety. Langkah ini terutama digunakan untuk memverifikasi keamanan referensi, termasuk memeriksa apakah ada referensi yang menggantung, apakah akses referensi yang dapat diubah aman, dan apakah akses referensi penyimpanan global aman.

Proses verifikasi pertama-tama akan mengidentifikasi blok dasar. Dalam bahasa Move, blok dasar ditentukan dengan menjelajahi bytecode, mencari semua urutan instruksi cabang dan instruksi loop. Setiap blok dasar adalah urutan kode yang tidak memiliki instruksi cabang kecuali untuk titik masuk dan keluar.

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move

Mekanisme Verifikasi Keamanan Kutipan

Bahasa Move mendukung dua jenis referensi yaitu referensi tidak dapat diubah (&) dan referensi dapat diubah (&mut). Modul verifikasi keamanan referensi akan memindai instruksi bytecode dari setiap blok dasar dalam fungsi secara unit, untuk menentukan apakah semua operasi referensi adalah sah.

Proses verifikasi menggunakan struktur AbstractState untuk mewakili status, yang mencakup dua komponen kunci yaitu borrow graph dan locals. Selama verifikasi, perubahan status sebelum dan sesudah eksekusi blok dasar akan dibandingkan dan hasilnya disebarkan ke blok-blok berikutnya.

Numen Cyber menemukan celah berbahaya lainnya dalam bahasa move

Rincian Kerentanan

Kerentanan ada di dalam fungsi join_. Fungsi ini digunakan untuk menggabungkan status sebelum dan setelah eksekusi blok dasar. Masalah terletak pada metode iter_locals(), yang mengembalikan iterator tipe u8. Ketika jumlah panjang parameter fungsi melebihi jumlah panjang variabel lokal sebesar 256, ini akan menyebabkan overflow integer.

Meskipun bahasa Move memiliki proses verifikasi jumlah locals, tetapi hanya memeriksa jumlah variabel lokal dan tidak termasuk panjang parameter. Ini mungkin merupakan kelalaian dari pengembang.

Numen Cyber menemukan kerentanan tinggi lain dalam bahasa move secara eksklusif

Numen Cyber menemukan satu lagi kerentanan tinggi di bahasa move

Numen Cyber menemukan kerentanan tinggi lainnya pada bahasa move

Numen Cyber menemukan celah berbahaya lain dalam bahasa move

Numen Cyber menemukan celah keamanan tinggi lain dalam bahasa move

Numen Cyber menemukan kerentanan tinggi 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 kerentanan tinggi lainnya pada bahasa move

Eksploitasi Kerentanan dan Dampaknya

Dengan memanfaatkan kerentanan overflow integer ini, penyerang dapat membangun blok kode loop khusus yang mengubah status blok. Ketika blok dasar dieksekusi lagi, jika indeks yang diakses oleh instruksi tidak ada dalam peta locals yang baru, itu akan menyebabkan penolakan layanan (DoS).

Secara spesifik, dalam modul reference safety, opcode seperti MoveLoc/CopyLoc/FreeRef dapat menyebabkan panic karena mengakses LocalIndex yang tidak ada, yang pada gilirannya dapat membuat seluruh node crash.

Numen Cyber menemukan kerentanan berbahaya lain dalam bahasa move eksklusif

Penemuan eksklusif Numen Cyber, satu lagi kerentanan tinggi pada bahasa move

Ringkasan dan Saran

Kekurangan ini sekali lagi membuktikan bahwa bahkan bahasa yang dirancang dengan hati-hati pun dapat memiliki kerentanan keamanan. Untuk bahasa Move, kami menyarankan:

  1. Memperkuat audit kode, untuk menghindari kelalaian serupa.
  2. Menambahkan lebih banyak kode pemeriksaan saat runtime Move, tidak hanya bergantung pada pemeriksaan keamanan tahap verifikasi.
  3. Menambahkan langkah keamanan selama fase operasional untuk mencegah masalah yang lebih serius akibat verifikasi yang dilewati.

Sebagai pelopor penelitian keamanan bahasa Move, kami akan terus menggali masalah keamanan terkait untuk berkontribusi pada pengembangan sehat ekosistem Move.

Numen Cyber menemukan kerentanan tinggi lainnya pada bahasa move

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
  • 9
  • Bagikan
Komentar
0/400
LiquidationWatchervip
· 07-07 17:46
astaga, lagi-lagi eksploitasi defi... bikin saya teringat besar pada tahun 2022 sekarang
Lihat AsliBalas0
BearMarketSunriservip
· 07-07 02:16
move doomed ah, trading a is not as good as trading b
Lihat AsliBalas0
SundayDegenvip
· 07-06 08:36
Wah, bug ini memang agak dasar.
Lihat AsliBalas0
MoonRocketmanvip
· 07-05 04:47
Tinggi intercept Move 256 telah hilang, waspadai risiko roket jatuh.
Lihat AsliBalas0
Web3ProductManagervip
· 07-05 04:47
melihat data saluran konversi, bug overflow ini = gesekan ux besar sejujurnya
Lihat AsliBalas0
PanicSeller69vip
· 07-05 04:47
Move terlalu renyah ya
Lihat AsliBalas0
WhaleMistakervip
· 07-05 04:46
move anjing harus dingin?
Lihat AsliBalas0
NeverVoteOnDAOvip
· 07-05 04:28
Aptos lagi ada bug kode ya???
Lihat AsliBalas0
SignatureCollectorvip
· 07-05 04:18
Masalah overflow lagi爬
Lihat AsliBalas0
Lihat Lebih Banyak
  • Sematkan
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)