Bahasa Move kembali menunjukkan kerentanan tinggi: overflow integer dapat menyebabkan Node crash
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, yang dapat menyebabkan Node mengalami crash.
Bahasa Move akan melakukan verifikasi kode sebelum mengeksekusi bytecode, yang terbagi menjadi 4 langkah. Kerentanan ini muncul 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 lain-lain.
Proses verifikasi akan menjelajahi setiap blok dasar dan melakukan analisis. Blok dasar adalah urutan kode yang tidak memiliki instruksi cabang kecuali untuk titik masuk dan keluar. Bahasa Move mengidentifikasi blok dasar dengan mencari instruksi cabang dan loop.
Saat memverifikasi keamanan referensi, sebuah struktur AbstractState akan dipertahankan, yang berisi informasi tentang borrow graph dan locals. Proses verifikasi akan menjalankan kode blok dasar, menghasilkan state setelah eksekusi, kemudian menggabungkannya dengan state sebelum eksekusi, memperbarui status blok dan menyebarkannya ke blok-blok selanjutnya.
Kelemahan muncul dalam fungsi join_. Fungsi ini digunakan untuk menggabungkan state sebelum dan sesudah eksekusi, memperbarui locals dan grafik peminjaman. Ketika jumlah panjang parameter dan panjang variabel lokal lebih dari 256, penggunaan tipe u8 untuk mengiterasi locals dapat menyebabkan overflow integer.
Dengan memanfaatkan overflow ini, kita dapat mengubah state dari basic block. Dalam kode yang memiliki loop, jika basic block yang sama dieksekusi beberapa kali, mungkin akan mengakses indeks locals yang tidak ada, yang dapat menyebabkan panic dan mengakibatkan node crash.
Peneliti menyediakan kode PoC yang memicu overflow integer dengan mengatur parameter tertentu dan jumlah variabel lokal, yang akhirnya menyebabkan panic.
Kerentanan ini menunjukkan bahwa bahkan bahasa yang mengutamakan keamanan seperti Move dapat memiliki celah. Disarankan agar perancang bahasa Move menambahkan lebih banyak pemeriksaan keamanan saat runtime, dan tidak hanya mengandalkan pemeriksaan di tahap verifikasi. Ini juga menyoroti 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.
Kerentanan overflow integer bahasa Move: risiko validasi keamanan yang dirujuk
Bahasa Move kembali menunjukkan kerentanan tinggi: overflow integer dapat menyebabkan Node crash
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, yang dapat menyebabkan Node mengalami crash.
Bahasa Move akan melakukan verifikasi kode sebelum mengeksekusi bytecode, yang terbagi menjadi 4 langkah. Kerentanan ini muncul 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 lain-lain.
Proses verifikasi akan menjelajahi setiap blok dasar dan melakukan analisis. Blok dasar adalah urutan kode yang tidak memiliki instruksi cabang kecuali untuk titik masuk dan keluar. Bahasa Move mengidentifikasi blok dasar dengan mencari instruksi cabang dan loop.
Saat memverifikasi keamanan referensi, sebuah struktur AbstractState akan dipertahankan, yang berisi informasi tentang borrow graph dan locals. Proses verifikasi akan menjalankan kode blok dasar, menghasilkan state setelah eksekusi, kemudian menggabungkannya dengan state sebelum eksekusi, memperbarui status blok dan menyebarkannya ke blok-blok selanjutnya.
Kelemahan muncul dalam fungsi join_. Fungsi ini digunakan untuk menggabungkan state sebelum dan sesudah eksekusi, memperbarui locals dan grafik peminjaman. Ketika jumlah panjang parameter dan panjang variabel lokal lebih dari 256, penggunaan tipe u8 untuk mengiterasi locals dapat menyebabkan overflow integer.
Dengan memanfaatkan overflow ini, kita dapat mengubah state dari basic block. Dalam kode yang memiliki loop, jika basic block yang sama dieksekusi beberapa kali, mungkin akan mengakses indeks locals yang tidak ada, yang dapat menyebabkan panic dan mengakibatkan node crash.
Peneliti menyediakan kode PoC yang memicu overflow integer dengan mengatur parameter tertentu dan jumlah variabel lokal, yang akhirnya menyebabkan panic.
Kerentanan ini menunjukkan bahwa bahkan bahasa yang mengutamakan keamanan seperti Move dapat memiliki celah. Disarankan agar perancang bahasa Move menambahkan lebih banyak pemeriksaan keamanan saat runtime, dan tidak hanya mengandalkan pemeriksaan di tahap verifikasi. Ini juga menyoroti pentingnya audit kode.