Modul keamanan referensi Move menemukan kerentanan overflow integer baru
Baru-baru ini, para peneliti menemukan kerentanan baru berupa overflow integer saat menganalisis bahasa Move secara mendalam. Kerentanan ini ada di modul keamanan referensi, yang dapat menyebabkan serangan penolakan layanan yang serius. Artikel ini akan memberikan penjelasan rinci tentang proses penemuan kerentanan ini dan detail teknisnya.
Mekanisme Keamanan Referensi Bahasa Move
Bahasa Move mengadopsi pemikiran Rust, mendukung dua jenis referensi: referensi tidak dapat diubah (&) dan referensi dapat diubah (&mut). Modul keamanan referensi memverifikasi semua operasi referensi yang sah dengan memindai blok dasar dan instruksi bytecode dalam fungsi.
Proses verifikasi terutama mencakup langkah-langkah berikut:
Analisis setiap blok dasar
Menjalankan kode blok dasar untuk menghasilkan post state
Menggabungkan pre state dan post state
Perbarui status blok dan sebar ke blok berikutnya
Di antara itu, state mencakup dua komponen kunci yaitu locals dan borrow graph, yang digunakan untuk memastikan keamanan referensi dalam fungsi.
Rincian Kerentanan
Vuln ini terjadi di dalam fungsi join_ yang merujuk pada modul keamanan. Ketika jumlah panjang parameter fungsi dan panjang variabel lokal lebih dari 256, penggunaan tipe u8 untuk mengiterasi locals akan menyebabkan overflow integer.
Secara spesifik:
iter_locals() mengembalikan iterator tipe u8
Ketika panjang parameter + panjang variabel lokal > 256, akan terjadi overflow
Para pengembang tampaknya menyadari perlunya memeriksa hal ini, tetapi kode sebenarnya hanya memeriksa jumlah variabel lokal.
Eksploitasi Kerentanan
Memanfaatkan celah ini dapat membangun blok kode berulang:
Memicu overflow saat pertama kali dieksekusi, mengubah peta locals
Mengakses indeks locals yang tidak ada saat eksekusi kedua, menyebabkan panic
Ini akan menyebabkan kegagalan node, membentuk serangan penolakan layanan.
Reproduksi Kerentanan
Peneliti menyediakan PoC untuk mereproduksi kerentanan ini:
Atur parameters dan locals menjadi SignatureIndex(0), sehingga num_locals menjadi 264
Setelah eksekusi pertama, panjang peta locals baru menjadi 8
Saat eksekusi kedua, copyloc(57) mengakses offset yang tidak ada menyebabkan panic.
Ringkasan dan Saran
Keterangan tentang celah ini:
Tidak ada kode yang benar-benar aman, pemeriksaan statis dapat dilewati.
Audit kode sangat penting, dapat menemukan kelalaian pengembang.
Bahasa Move seharusnya menambahkan pemeriksaan waktu berjalan, bukan hanya bergantung pada pemeriksaan keamanan di tahap verifikasi.
Para peneliti menyerukan kepada perancang bahasa Move untuk memperkuat mekanisme keamanan runtime, untuk mencegah masalah yang lebih serius akibat eksploitasi kerentanan serupa.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
13 Suka
Hadiah
13
6
Bagikan
Komentar
0/400
staking_gramps
· 07-06 05:24
Move, celah ini terlalu amatir.
Lihat AsliBalas0
ChainMaskedRider
· 07-06 05:22
Keterampilan menulis kode terlalu kasar, bukan?
Lihat AsliBalas0
MissedTheBoat
· 07-06 05:20
Ada celah lagi, Move juga tidak begitu baik.
Lihat AsliBalas0
GateUser-c799715c
· 07-06 05:19
Siapa yang menulis kode ini? Kenapa begitu buruk?
Lihat AsliBalas0
YieldChaser
· 07-06 05:17
u8 kembali bermasalah ya
Lihat AsliBalas0
BridgeJumper
· 07-06 05:09
Pengembangan yang tidak standar, dua baris air mata memperbaiki bug
Modul keamanan referensi Move language menemukan kerentanan overflow integer yang dapat menyebabkan denial-of-service attack
Modul keamanan referensi Move menemukan kerentanan overflow integer baru
Baru-baru ini, para peneliti menemukan kerentanan baru berupa overflow integer saat menganalisis bahasa Move secara mendalam. Kerentanan ini ada di modul keamanan referensi, yang dapat menyebabkan serangan penolakan layanan yang serius. Artikel ini akan memberikan penjelasan rinci tentang proses penemuan kerentanan ini dan detail teknisnya.
Mekanisme Keamanan Referensi Bahasa Move
Bahasa Move mengadopsi pemikiran Rust, mendukung dua jenis referensi: referensi tidak dapat diubah (&) dan referensi dapat diubah (&mut). Modul keamanan referensi memverifikasi semua operasi referensi yang sah dengan memindai blok dasar dan instruksi bytecode dalam fungsi.
Proses verifikasi terutama mencakup langkah-langkah berikut:
Di antara itu, state mencakup dua komponen kunci yaitu locals dan borrow graph, yang digunakan untuk memastikan keamanan referensi dalam fungsi.
Rincian Kerentanan
Vuln ini terjadi di dalam fungsi join_ yang merujuk pada modul keamanan. Ketika jumlah panjang parameter fungsi dan panjang variabel lokal lebih dari 256, penggunaan tipe u8 untuk mengiterasi locals akan menyebabkan overflow integer.
Secara spesifik:
Eksploitasi Kerentanan
Memanfaatkan celah ini dapat membangun blok kode berulang:
Ini akan menyebabkan kegagalan node, membentuk serangan penolakan layanan.
Reproduksi Kerentanan
Peneliti menyediakan PoC untuk mereproduksi kerentanan ini:
Ringkasan dan Saran
Keterangan tentang celah ini:
Para peneliti menyerukan kepada perancang bahasa Move untuk memperkuat mekanisme keamanan runtime, untuk mencegah masalah yang lebih serius akibat eksploitasi kerentanan serupa.