Bahasa Move kembali mengalami kerentanan tinggi: Overflow integer dapat menyebabkan Node crash
Baru-baru ini, peneliti keamanan menemukan kerentanan overflow integer baru saat menganalisis bahasa Move secara mendalam, yang dapat menyebabkan Node gagal. Kerentanan ini ada di modul verifikasi keamanan referensi bahasa Move, yang melibatkan analisis blok dasar dan proses penggabungan status.
Bahasa Move akan melakukan verifikasi kode sebelum mengeksekusi bytecode, yang terbagi menjadi 4 langkah. Kerentanan yang ditemukan kali ini muncul pada tahap verifikasi keamanan (reference_safety). Tahap ini akan menganalisis blok dasar dalam fungsi, memverifikasi legalitas operasi referensi.
Selama proses verifikasi, akan dipelihara sebuah struktur AbstractState yang berisi variabel lokal (locals) dan grafik hubungan peminjaman (borrow graph). Saat menganalisis blok dasar, instruksi di dalam blok akan dieksekusi untuk menghasilkan post state, kemudian digabungkan dengan pre state untuk memperbarui status.
Kerentanan muncul dalam fungsi join_ dalam status penggabungan. Fungsi ini akan menjelajahi variabel locals, tetapi locals mencakup parameter fungsi dan variabel lokal. Ketika jumlah parameter ditambah jumlah variabel lokal melebihi 256, terjadi overflow integer karena menggunakan tipe u8 untuk iterasi.
Penyerang dapat membangun blok kode loop khusus, memanfaatkan overflow ini untuk mengubah status. Pada analisis putaran berikutnya, beberapa instruksi mungkin mengakses indeks locals yang tidak ada, sehingga memicu panic yang menyebabkan Node runtuh.
Peneliti telah menyediakan sebuah bukti konsep (PoC), dengan mengatur 264 variabel locals, yang dapat memicu panic pada analisis putaran kedua. Ini mengungkapkan bahwa bahasa Move kekurangan pemeriksaan keamanan yang memadai saat dijalankan.
Kelemahan ini sekali lagi menunjukkan bahwa bahkan bahasa Move yang menekankan keamanan pun mungkin memiliki celah. Disarankan agar perancang bahasa Move menambahkan lebih banyak pemeriksaan keamanan pada saat runtime, bukan hanya bergantung pada analisis statis pada tahap verifikasi. Juga diingatkan kepada para pengembang untuk memperkuat audit kode untuk menghindari kelalaian serupa.
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.
Bahasa Move mengekspos kerentanan overflow integer, risiko keruntuhan Node menarik perhatian
Bahasa Move kembali mengalami kerentanan tinggi: Overflow integer dapat menyebabkan Node crash
Baru-baru ini, peneliti keamanan menemukan kerentanan overflow integer baru saat menganalisis bahasa Move secara mendalam, yang dapat menyebabkan Node gagal. Kerentanan ini ada di modul verifikasi keamanan referensi bahasa Move, yang melibatkan analisis blok dasar dan proses penggabungan status.
Bahasa Move akan melakukan verifikasi kode sebelum mengeksekusi bytecode, yang terbagi menjadi 4 langkah. Kerentanan yang ditemukan kali ini muncul pada tahap verifikasi keamanan (reference_safety). Tahap ini akan menganalisis blok dasar dalam fungsi, memverifikasi legalitas operasi referensi.
Selama proses verifikasi, akan dipelihara sebuah struktur AbstractState yang berisi variabel lokal (locals) dan grafik hubungan peminjaman (borrow graph). Saat menganalisis blok dasar, instruksi di dalam blok akan dieksekusi untuk menghasilkan post state, kemudian digabungkan dengan pre state untuk memperbarui status.
Kerentanan muncul dalam fungsi join_ dalam status penggabungan. Fungsi ini akan menjelajahi variabel locals, tetapi locals mencakup parameter fungsi dan variabel lokal. Ketika jumlah parameter ditambah jumlah variabel lokal melebihi 256, terjadi overflow integer karena menggunakan tipe u8 untuk iterasi.
Penyerang dapat membangun blok kode loop khusus, memanfaatkan overflow ini untuk mengubah status. Pada analisis putaran berikutnya, beberapa instruksi mungkin mengakses indeks locals yang tidak ada, sehingga memicu panic yang menyebabkan Node runtuh.
Peneliti telah menyediakan sebuah bukti konsep (PoC), dengan mengatur 264 variabel locals, yang dapat memicu panic pada analisis putaran kedua. Ini mengungkapkan bahwa bahasa Move kekurangan pemeriksaan keamanan yang memadai saat dijalankan.
Kelemahan ini sekali lagi menunjukkan bahwa bahkan bahasa Move yang menekankan keamanan pun mungkin memiliki celah. Disarankan agar perancang bahasa Move menambahkan lebih banyak pemeriksaan keamanan pada saat runtime, bukan hanya bergantung pada analisis statis pada tahap verifikasi. Juga diingatkan kepada para pengembang untuk memperkuat audit kode untuk menghindari kelalaian serupa.