Kerentanan overflow integer baru ditemukan dalam mekanisme keamanan rujukan bahasa Move
Baru-baru ini, peneliti keamanan menemukan celah integer overflow baru saat menganalisis Aptos MoveEVM secara mendalam. Celah ini ada dalam proses verifikasi keamanan referensi bahasa Move, tepatnya terletak pada langkah reference_safety.
Bahasa Move melakukan verifikasi unit kode sebelum mengeksekusi bytecode, yang terdiri dari 4 langkah. Verifikasi keamanan referensi adalah salah satu tahap penting, yang terutama digunakan untuk memastikan tidak ada referensi yang tergantung, akses ke referensi yang dapat diubah adalah aman, dan akses ke referensi penyimpanan global adalah aman, dll.
Inti dari verifikasi keamanan adalah menganalisis blok dasar dalam setiap fungsi. Blok dasar adalah urutan kode yang tidak memiliki instruksi cabang kecuali untuk pintu masuk dan keluar. Move menentukan blok dasar dengan menjelajahi bytecode, mencari semua instruksi cabang dan instruksi loop.
Proses verifikasi menggunakan struktur AbstractState untuk merepresentasikan status, yang mencakup dua bagian: borrow graph dan locals. Selama verifikasi, akan dilakukan penghasilan kode blok dasar post state, kemudian digabungkan dengan pre state untuk memperbarui status blok, dan disebarkan ke blok berikutnya. Proses ini mirip dengan pemikiran Sea of Nodes dalam V8 turbofan.
Kelemahan muncul di dalam fungsi join_. Ketika jumlah panjang parameter fungsi ditambahkan dengan panjang variabel lokal melebihi 256, penggunaan tipe u8 untuk iterasi lokal dapat menyebabkan overflow integer. Meskipun Move memiliki proses pemeriksaan jumlah locals, namun hanya memeriksa locals dan tidak termasuk panjang parameter.
Dengan memanfaatkan celah ini, penyerang dapat membangun blok kode berulang, menggunakan overflow untuk mengubah state blok. Ketika dijalankan lagi, jika indeks yang diperlukan oleh instruksi tidak ada dalam peta locals yang baru, itu akan menyebabkan DoS.
Kelemahan ini sekali lagi menunjukkan bahwa bahkan bahasa yang sangat memperhatikan keamanan seperti Move dapat memiliki masalah. Disarankan agar perancang bahasa Move menambahkan lebih banyak pemeriksaan saat runtime, dan tidak hanya mengandalkan pemeriksaan keamanan pada tahap verifikasi. Ini juga mengingatkan para pengembang akan pentingnya audit kode.
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.
12 Suka
Hadiah
12
5
Bagikan
Komentar
0/400
BoredWatcher
· 15jam yang lalu
Bug ini sangat konyol, bagaimana bisa begitu dangkal
Lihat AsliBalas0
WalletInspector
· 15jam yang lalu
Heh, lebih baik menggunakan Rust daripada Move.
Lihat AsliBalas0
MemecoinTrader
· 15jam yang lalu
lmao satu lagi l1 hancur... kebocoran alpha integer overflow klasik
Lihat AsliBalas0
LidoStakeAddict
· 15jam yang lalu
Move lagi bermasalah. Tsk tsk.
Lihat AsliBalas0
BuyHighSellLow
· 15jam yang lalu
Sekali lagi hancur, biarkan semuanya dimulai dari awal.
Mekanisme keamanan yang dirujuk oleh bahasa Move menemukan kerentanan overflow integer yang mempengaruhi AptosMoveEVM
Kerentanan overflow integer baru ditemukan dalam mekanisme keamanan rujukan bahasa Move
Baru-baru ini, peneliti keamanan menemukan celah integer overflow baru saat menganalisis Aptos MoveEVM secara mendalam. Celah ini ada dalam proses verifikasi keamanan referensi bahasa Move, tepatnya terletak pada langkah reference_safety.
Bahasa Move melakukan verifikasi unit kode sebelum mengeksekusi bytecode, yang terdiri dari 4 langkah. Verifikasi keamanan referensi adalah salah satu tahap penting, yang terutama digunakan untuk memastikan tidak ada referensi yang tergantung, akses ke referensi yang dapat diubah adalah aman, dan akses ke referensi penyimpanan global adalah aman, dll.
Inti dari verifikasi keamanan adalah menganalisis blok dasar dalam setiap fungsi. Blok dasar adalah urutan kode yang tidak memiliki instruksi cabang kecuali untuk pintu masuk dan keluar. Move menentukan blok dasar dengan menjelajahi bytecode, mencari semua instruksi cabang dan instruksi loop.
Proses verifikasi menggunakan struktur AbstractState untuk merepresentasikan status, yang mencakup dua bagian: borrow graph dan locals. Selama verifikasi, akan dilakukan penghasilan kode blok dasar post state, kemudian digabungkan dengan pre state untuk memperbarui status blok, dan disebarkan ke blok berikutnya. Proses ini mirip dengan pemikiran Sea of Nodes dalam V8 turbofan.
Kelemahan muncul di dalam fungsi join_. Ketika jumlah panjang parameter fungsi ditambahkan dengan panjang variabel lokal melebihi 256, penggunaan tipe u8 untuk iterasi lokal dapat menyebabkan overflow integer. Meskipun Move memiliki proses pemeriksaan jumlah locals, namun hanya memeriksa locals dan tidak termasuk panjang parameter.
Dengan memanfaatkan celah ini, penyerang dapat membangun blok kode berulang, menggunakan overflow untuk mengubah state blok. Ketika dijalankan lagi, jika indeks yang diperlukan oleh instruksi tidak ada dalam peta locals yang baru, itu akan menyebabkan DoS.
Kelemahan ini sekali lagi menunjukkan bahwa bahkan bahasa yang sangat memperhatikan keamanan seperti Move dapat memiliki masalah. Disarankan agar perancang bahasa Move menambahkan lebih banyak pemeriksaan saat runtime, dan tidak hanya mengandalkan pemeriksaan keamanan pada tahap verifikasi. Ini juga mengingatkan para pengembang akan pentingnya audit kode.