Analisis Kerentanan Overflow Integer dalam Pemeriksaan Keamanan Referensi Bahasa Move
Baru-baru ini, sebuah celah overflow integer baru ditemukan dalam proses verifikasi keamanan yang merujuk pada bahasa Move. Celah ini muncul dalam langkah reference_safety dari unit kode verifikasi, yang melibatkan blok dasar dan mekanisme keamanan referensi dalam bahasa Move.
Bahasa Move melakukan verifikasi kode sebelum menjalankan bytecode, yang terdiri dari empat langkah. Verifikasi keamanan referensi adalah salah satu tahap penting, digunakan untuk memeriksa apakah terdapat referensi mengambang, apakah akses ke referensi yang dapat diubah aman, dan lain-lain. Proses verifikasi akan menjelajahi setiap instruksi bytecode dari setiap blok dasar.
Blok dasar mengacu pada urutan kode yang tidak memiliki instruksi cabang selain titik masuk dan keluar. Bahasa Move mengidentifikasi blok dasar dengan memeriksa instruksi cabang dan perulangan. Verifikasi keamanan referensi akan memindai instruksi dalam setiap blok dasar untuk menentukan keabsahan operasi referensi.
Proses verifikasi menggunakan struktur AbstractState untuk merepresentasikan status, yang mencakup dua komponen kunci yaitu locals dan grafik pinjaman. Verifikasi akan membandingkan status sebelum dan sesudah eksekusi, menggabungkan hasil dan menyebarkannya ke blok berikutnya.
Kerentanan terjadi di dalam fungsi join_. Ketika jumlah panjang parameter dan panjang variabel lokal melebihi 256, karena menggunakan tipe u8 untuk mengiterasi locals, akan terjadi overflow integer. Ini dapat menyebabkan peta locals baru berbeda dari sebelumnya, yang mengakibatkan akses ke indeks yang tidak ada saat dieksekusi lagi, memicu penolakan layanan.
Kode PoC memicu overflow integer dengan mengatur parameter tertentu dan jumlah variabel lokal, yang menyebabkan panjang peta locals baru menyusut. Saat dieksekusi lagi, mengakses offset yang tidak ada, akhirnya menyebabkan panic.
Kerentanan ini menunjukkan bahwa bahkan bahasa dengan tipe statis pun dapat memiliki masalah keamanan. Disarankan agar perancang bahasa Move menambahkan lebih banyak pemeriksaan keamanan pada saat runtime, bukan hanya bergantung pada pemeriksaan tahap verifikasi. Ini juga mencerminkan 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.
Vulnerabilitas overflow integer dalam validasi keamanan referensi bahasa Move dapat menyebabkan penolakan layanan.
Analisis Kerentanan Overflow Integer dalam Pemeriksaan Keamanan Referensi Bahasa Move
Baru-baru ini, sebuah celah overflow integer baru ditemukan dalam proses verifikasi keamanan yang merujuk pada bahasa Move. Celah ini muncul dalam langkah reference_safety dari unit kode verifikasi, yang melibatkan blok dasar dan mekanisme keamanan referensi dalam bahasa Move.
Bahasa Move melakukan verifikasi kode sebelum menjalankan bytecode, yang terdiri dari empat langkah. Verifikasi keamanan referensi adalah salah satu tahap penting, digunakan untuk memeriksa apakah terdapat referensi mengambang, apakah akses ke referensi yang dapat diubah aman, dan lain-lain. Proses verifikasi akan menjelajahi setiap instruksi bytecode dari setiap blok dasar.
Blok dasar mengacu pada urutan kode yang tidak memiliki instruksi cabang selain titik masuk dan keluar. Bahasa Move mengidentifikasi blok dasar dengan memeriksa instruksi cabang dan perulangan. Verifikasi keamanan referensi akan memindai instruksi dalam setiap blok dasar untuk menentukan keabsahan operasi referensi.
Proses verifikasi menggunakan struktur AbstractState untuk merepresentasikan status, yang mencakup dua komponen kunci yaitu locals dan grafik pinjaman. Verifikasi akan membandingkan status sebelum dan sesudah eksekusi, menggabungkan hasil dan menyebarkannya ke blok berikutnya.
Kerentanan terjadi di dalam fungsi join_. Ketika jumlah panjang parameter dan panjang variabel lokal melebihi 256, karena menggunakan tipe u8 untuk mengiterasi locals, akan terjadi overflow integer. Ini dapat menyebabkan peta locals baru berbeda dari sebelumnya, yang mengakibatkan akses ke indeks yang tidak ada saat dieksekusi lagi, memicu penolakan layanan.
Kode PoC memicu overflow integer dengan mengatur parameter tertentu dan jumlah variabel lokal, yang menyebabkan panjang peta locals baru menyusut. Saat dieksekusi lagi, mengakses offset yang tidak ada, akhirnya menyebabkan panic.
Kerentanan ini menunjukkan bahwa bahkan bahasa dengan tipe statis pun dapat memiliki masalah keamanan. Disarankan agar perancang bahasa Move menambahkan lebih banyak pemeriksaan keamanan pada saat runtime, bukan hanya bergantung pada pemeriksaan tahap verifikasi. Ini juga mencerminkan pentingnya audit kode.