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.
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.
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.
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.
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.
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:
Memperkuat audit kode, untuk menghindari kelalaian serupa.
Menambahkan lebih banyak kode pemeriksaan saat runtime Move, tidak hanya bergantung pada pemeriksaan keamanan tahap verifikasi.
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.
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.
21 Suka
Hadiah
21
9
Bagikan
Komentar
0/400
LiquidationWatcher
· 07-07 17:46
astaga, lagi-lagi eksploitasi defi... bikin saya teringat besar pada tahun 2022 sekarang
Lihat AsliBalas0
BearMarketSunriser
· 07-07 02:16
move doomed ah, trading a is not as good as trading b
Lihat AsliBalas0
SundayDegen
· 07-06 08:36
Wah, bug ini memang agak dasar.
Lihat AsliBalas0
MoonRocketman
· 07-05 04:47
Tinggi intercept Move 256 telah hilang, waspadai risiko roket jatuh.
Lihat AsliBalas0
Web3ProductManager
· 07-05 04:47
melihat data saluran konversi, bug overflow ini = gesekan ux besar sejujurnya
Analisis Kerentanan Overflow Integer dalam Verifikasi Keamanan Referensi Bahasa Move
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.
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.
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.
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.
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.
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:
Sebagai pelopor penelitian keamanan bahasa Move, kami akan terus menggali masalah keamanan terkait untuk berkontribusi pada pengembangan sehat ekosistem Move.