Mekanisme keamanan referensi bahasa Move memiliki kerentanan overflow integer
Baru-baru ini, peneliti keamanan menemukan kerentanan integer overflow baru saat menganalisis bahasa Move secara mendalam. Kerentanan ini muncul selama proses verifikasi keamanan referensi bahasa Move, yang dapat menyebabkan serangan penolakan layanan.
Bahasa Move akan melakukan verifikasi kode sebelum mengeksekusi bytecode, yang terdiri dari 4 langkah. Kerentanan ini ada pada tahap verifikasi referensi keamanan (reference_safety). Tujuan utama dari verifikasi referensi keamanan adalah untuk memastikan tidak ada referensi yang menggantung, akses referensi yang dapat diubah aman, akses referensi penyimpanan global aman, dan lainnya.
Proses verifikasi akan menjelajahi setiap instruksi bytecode blok dasar. Blok dasar adalah urutan kode yang tidak memiliki instruksi cabang kecuali untuk pintu masuk dan keluarnya. Bahasa Move mengidentifikasi blok dasar dengan menganalisis instruksi cabang dan instruksi loop.
Referensi validasi keamanan menggunakan struktur AbstractState untuk melacak variabel lokal dan hubungan referensi. Ini terdiri dari dua bagian: locals dan grafik pinjaman. Saat memvalidasi, status sebelum dan sesudah eksekusi akan dibandingkan, dan pembaruan akan digabungkan.
Kerentanan muncul di fungsi join_ dalam status penggabungan. Fungsi ini menggunakan tipe u8 untuk mengiterasi locals, tetapi jika jumlah parameter dan variabel lokal melebihi 256, akan menyebabkan overflow integer. Meskipun ada logika untuk memeriksa jumlah locals, panjang parameter tidak dipertimbangkan.
Penyerang dapat membangun blok dasar berulang, memanfaatkan overflow ini untuk mengubah status. Melakukan eksekusi lagi dengan mengakses indeks locals yang tidak ada akan menyebabkan panic, yang menyebabkan penolakan layanan.
Kelemahan ini mencerminkan bahwa bahkan bahasa yang aman dengan tipe statis pun dapat memiliki celah keamanan. Disarankan agar bahasa Move menambahkan lebih banyak pemeriksaan keamanan pada runtime, tidak hanya bergantung pada tahap verifikasi. Ini juga menunjukkan 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.
Mekanisme keamanan referensi bahasa Move mengungkapkan kerentanan overflow integer yang dapat menyebabkan denial-of-service attack
Mekanisme keamanan referensi bahasa Move memiliki kerentanan overflow integer
Baru-baru ini, peneliti keamanan menemukan kerentanan integer overflow baru saat menganalisis bahasa Move secara mendalam. Kerentanan ini muncul selama proses verifikasi keamanan referensi bahasa Move, yang dapat menyebabkan serangan penolakan layanan.
Bahasa Move akan melakukan verifikasi kode sebelum mengeksekusi bytecode, yang terdiri dari 4 langkah. Kerentanan ini ada pada tahap verifikasi referensi keamanan (reference_safety). Tujuan utama dari verifikasi referensi keamanan adalah untuk memastikan tidak ada referensi yang menggantung, akses referensi yang dapat diubah aman, akses referensi penyimpanan global aman, dan lainnya.
Proses verifikasi akan menjelajahi setiap instruksi bytecode blok dasar. Blok dasar adalah urutan kode yang tidak memiliki instruksi cabang kecuali untuk pintu masuk dan keluarnya. Bahasa Move mengidentifikasi blok dasar dengan menganalisis instruksi cabang dan instruksi loop.
Referensi validasi keamanan menggunakan struktur AbstractState untuk melacak variabel lokal dan hubungan referensi. Ini terdiri dari dua bagian: locals dan grafik pinjaman. Saat memvalidasi, status sebelum dan sesudah eksekusi akan dibandingkan, dan pembaruan akan digabungkan.
Kerentanan muncul di fungsi join_ dalam status penggabungan. Fungsi ini menggunakan tipe u8 untuk mengiterasi locals, tetapi jika jumlah parameter dan variabel lokal melebihi 256, akan menyebabkan overflow integer. Meskipun ada logika untuk memeriksa jumlah locals, panjang parameter tidak dipertimbangkan.
Penyerang dapat membangun blok dasar berulang, memanfaatkan overflow ini untuk mengubah status. Melakukan eksekusi lagi dengan mengakses indeks locals yang tidak ada akan menyebabkan panic, yang menyebabkan penolakan layanan.
Kelemahan ini mencerminkan bahwa bahkan bahasa yang aman dengan tipe statis pun dapat memiliki celah keamanan. Disarankan agar bahasa Move menambahkan lebih banyak pemeriksaan keamanan pada runtime, tidak hanya bergantung pada tahap verifikasi. Ini juga menunjukkan pentingnya audit kode.