Baru-baru ini, sebuah kerentanan serius berupa overflow integer ditemukan ada dalam bahasa Move. Kerentanan ini muncul dalam langkah verifikasi keamanan yang dapat menyebabkan serangan penolakan layanan. Dengan menganalisis kerentanan ini secara mendalam, kita dapat memperoleh pemahaman yang lebih mendalam tentang bahasa Move.
Bahasa Move melakukan verifikasi kode sebelum mengeksekusi bytecode, yang terbagi menjadi empat langkah. Kerentanan ini muncul pada langkah reference_safety. Modul reference_safety bertanggung jawab untuk memverifikasi keabsahan operasi referensi, termasuk memeriksa apakah ada referensi yang menggantung dan apakah akses referensi yang dapat diubah aman.
Proses verifikasi dilakukan dengan unit fungsi. Untuk setiap fungsi, blok dasar diidentifikasi. Blok dasar adalah sekuens kode yang berkelanjutan, hanya mungkin ada cabang di titik masuk dan keluar. Kemudian, setiap blok dasar dianalisis, menghasilkan status sebelum dan sesudah eksekusi, dan status tersebut disebarkan ke blok berikutnya.
Status mencakup dua bagian informasi, yaitu locals dan borrow graph. Locals mencatat informasi tentang variabel lokal, sedangkan borrow graph menunjukkan hubungan referensi antar variabel. Proses analisis akan terus memperbarui informasi status ini.
Kerentanan muncul selama proses penggabungan status. Ketika jumlah parameter fungsi dan variabel lokal melebihi 256, karena penggunaan tipe u8 untuk merepresentasikan indeks, akan terjadi overflow integer. Ini menyebabkan informasi status yang digabungkan menjadi salah, yang pada gilirannya dapat memicu serangan penolakan layanan.
Meskipun bahasa Move memiliki mekanisme untuk memeriksa jumlah variabel lokal, namun tidak mempertimbangkan jumlah parameter. Kelalaian ini menyebabkan munculnya kerentanan.
Untuk memicu kerentanan ini, penyerang dapat membangun blok kode berulang, memanfaatkan overflow untuk mengubah status blok. Ketika dieksekusi lagi, karena informasi status yang salah, mengakses variabel yang tidak ada akan menyebabkan program crash.
Kerentanan ini sekali lagi menunjukkan bahwa bahkan bahasa yang dirancang dengan cermat pun dapat memiliki risiko keamanan. Ini mengingatkan kita akan pentingnya audit kode dan perlunya pertimbangan keamanan yang lebih komprehensif dalam desain bahasa. Untuk bahasa Move, menambahkan lebih banyak pemeriksaan pada saat runtime mungkin menjadi arah perbaikan.
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 dalam bahasa Move terungkap, mengacu pada risiko verifikasi keamanan.
Kerentanan Overflow Integer dalam Bahasa Move
Baru-baru ini, sebuah kerentanan serius berupa overflow integer ditemukan ada dalam bahasa Move. Kerentanan ini muncul dalam langkah verifikasi keamanan yang dapat menyebabkan serangan penolakan layanan. Dengan menganalisis kerentanan ini secara mendalam, kita dapat memperoleh pemahaman yang lebih mendalam tentang bahasa Move.
Bahasa Move melakukan verifikasi kode sebelum mengeksekusi bytecode, yang terbagi menjadi empat langkah. Kerentanan ini muncul pada langkah reference_safety. Modul reference_safety bertanggung jawab untuk memverifikasi keabsahan operasi referensi, termasuk memeriksa apakah ada referensi yang menggantung dan apakah akses referensi yang dapat diubah aman.
Proses verifikasi dilakukan dengan unit fungsi. Untuk setiap fungsi, blok dasar diidentifikasi. Blok dasar adalah sekuens kode yang berkelanjutan, hanya mungkin ada cabang di titik masuk dan keluar. Kemudian, setiap blok dasar dianalisis, menghasilkan status sebelum dan sesudah eksekusi, dan status tersebut disebarkan ke blok berikutnya.
Status mencakup dua bagian informasi, yaitu locals dan borrow graph. Locals mencatat informasi tentang variabel lokal, sedangkan borrow graph menunjukkan hubungan referensi antar variabel. Proses analisis akan terus memperbarui informasi status ini.
Kerentanan muncul selama proses penggabungan status. Ketika jumlah parameter fungsi dan variabel lokal melebihi 256, karena penggunaan tipe u8 untuk merepresentasikan indeks, akan terjadi overflow integer. Ini menyebabkan informasi status yang digabungkan menjadi salah, yang pada gilirannya dapat memicu serangan penolakan layanan.
Meskipun bahasa Move memiliki mekanisme untuk memeriksa jumlah variabel lokal, namun tidak mempertimbangkan jumlah parameter. Kelalaian ini menyebabkan munculnya kerentanan.
Untuk memicu kerentanan ini, penyerang dapat membangun blok kode berulang, memanfaatkan overflow untuk mengubah status blok. Ketika dieksekusi lagi, karena informasi status yang salah, mengakses variabel yang tidak ada akan menyebabkan program crash.
Kerentanan ini sekali lagi menunjukkan bahwa bahkan bahasa yang dirancang dengan cermat pun dapat memiliki risiko keamanan. Ini mengingatkan kita akan pentingnya audit kode dan perlunya pertimbangan keamanan yang lebih komprehensif dalam desain bahasa. Untuk bahasa Move, menambahkan lebih banyak pemeriksaan pada saat runtime mungkin menjadi arah perbaikan.