Vulnerabilitas overflow integer baru ditemukan dalam verifikasi keamanan referensi bahasa Move

robot
Pembuatan abstrak sedang berlangsung

Kerentanan overflow integer baru ditemukan dalam mekanisme keamanan referensi bahasa Move

Baru-baru ini, saat melakukan penelitian mendalam terhadap bahasa Move, kami menemukan celah overflow integer yang baru. Celah ini muncul selama proses verifikasi keamanan referensi, yang melibatkan beberapa mekanisme inti dari bahasa Move. Dengan menganalisis celah ini, kami dapat memahami lebih dalam tentang desain dan implementasi bahasa Move.

Proses Verifikasi Bahasa Move

Bahasa Move akan memverifikasi unit kode sebelum mengeksekusi bytecode, dan proses ini dibagi menjadi 4 langkah. Kerentanan yang ditemukan kali ini terjadi pada langkah reference_safety.

modul reference_safety mendefinisikan fungsi inti yang digunakan untuk memverifikasi keamanan referensi. Ini terutama memeriksa apakah ada referensi yang mengambang, apakah akses referensi yang dapat diubah aman, dan apakah akses referensi penyimpanan global aman, dan masalah lainnya.

Fungsi masuk dari proses verifikasi akan memanggil analyze_function untuk menganalisis setiap fungsi. analyze_function akan memverifikasi setiap blok dasar dalam fungsi. Blok dasar adalah urutan kode yang tidak memiliki instruksi cabang kecuali untuk masuk dan keluar.

Numen Cyber menemukan celah keamanan tinggi lainnya dalam bahasa move

Keamanan Referensi dalam Bahasa Move

Bahasa Move mendukung dua jenis referensi: referensi tidak dapat diubah (&) dan referensi dapat diubah (&mut). Referensi tidak dapat diubah digunakan untuk membaca data, sedangkan referensi dapat diubah digunakan untuk memodifikasi data. Desain ini membantu meningkatkan keamanan dan keterbacaan kode.

Modul verifikasi keamanan akan memindai instruksi bytecode setiap blok dasar dalam fungsi, menilai apakah semua operasi referensi sah. Proses verifikasi terutama mencakup:

  1. Menjalankan kode blok dasar
  2. Status sebelum dan sesudah eksekusi digabung
  3. Memperbarui status blok
  4. Menyebarkan kondisi pasca ke blok berikutnya

Proses ini mirip dengan pemikiran Sea of Nodes dalam V8 turbofan.

Numen Cyber menemukan celah berbahaya lainnya pada bahasa move secara eksklusif

Analisis Kerentanan

Kerentanan muncul selama proses penggabungan status sebelum dan sesudah eksekusi. Ketika panjang parameter fungsi ditambah dengan panjang variabel lokal melebihi 256, penggunaan tipe u8 untuk merepresentasikan indeks variabel lokal dapat menyebabkan overflow integer.

Meskipun bahasa Move memiliki proses untuk memverifikasi jumlah variabel lokal, pemeriksaan ini tidak mencakup panjang parameter. Para pengembang tampaknya menyadari perlunya memeriksa jumlah total parameter dan variabel lokal, namun dalam kode nyata hanya jumlah variabel lokal yang diperiksa.

Overflow ini dapat menyebabkan serangan penolakan layanan ( DoS ). Penyerang dapat membangun blok kode berulang yang memanfaatkan overflow untuk mengubah status blok. Ketika blok dasar dieksekusi lagi, jika indeks yang perlu diakses oleh instruksi tidak ada dalam status baru, maka akan menyebabkan program crash.

Numen Cyber menemukan kerentanan tinggi lainnya pada bahasa move

Numen Cyber menemukan celah berbahaya lainnya dalam bahasa move

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move

Numen Cyber menemukan celah berbahaya lain pada bahasa move

Numen Cyber menemukan celah berbahaya lainnya dalam bahasa move

Numen Cyber menemukan celah berbahaya lainnya dalam bahasa move

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move secara eksklusif

Numen Cyber menemukan celah berisiko tinggi lainnya dalam bahasa move

Numen Cyber menemukan celah berbahaya lainnya dalam bahasa move

Eksploitasi Kerentanan

Kami telah membangun bukti konsep ( PoC ) untuk mendemonstrasikan kerentanan ini:

  1. Buat blok dasar yang berisi instruksi percabangan tak bersyarat, sehingga dapat dieksekusi berulang kali.
  2. Atur jumlah parameter dan variabel lokal menjadi 264, menyebabkan panjang pemetaan variabel lokal baru meluap menjadi 8.
  3. Saat menjalankan blok dasar lagi, mencoba mengakses indeks variabel lokal yang tidak ada, menyebabkan panic.

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move

Numen Cyber menemukan celah berbahaya lainnya dalam bahasa move

Numen Cyber menemukan kerentanan tinggi lainnya dalam bahasa move

Numen Cyber menemukan kerentanan tinggi lainnya pada bahasa move secara eksklusif

Kesimpulan

Kelemahan ini sekali lagi membuktikan bahwa tidak ada kode yang sepenuhnya aman. Meskipun bahasa Move melakukan pemeriksaan statis sebelum eksekusi, masih mungkin untuk dilewati oleh kerentanan overflow integer.

Untuk pengembangan masa depan bahasa Move, kami menyarankan:

  1. Tambahkan lebih banyak kode pemeriksaan saat menjalankan untuk mencegah situasi yang tidak terduga.
  2. Jangan hanya bergantung pada pemeriksaan keamanan di fase verifikasi, tetapi juga harus melakukan penguatan keamanan di fase operasi.

Sebagai pelopor penelitian keamanan bahasa Move, kami akan terus mendalami masalah keamanan Move dan memberikan kontribusi bagi perkembangannya.

Lihat Asli
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.
  • Hadiah
  • 3
  • Bagikan
Komentar
0/400
SnapshotLaborervip
· 12jam yang lalu
Belajar selama lima menit lalu pergi untuk melaporkan bug.
Lihat AsliBalas0
RadioShackKnightvip
· 12jam yang lalu
move lumpur tidak bisa diangkat ke dinding
Lihat AsliBalas0
LayerZeroHerovip
· 13jam yang lalu
Ada yang bisa dikatakan, move juga tidak lebih dari ini.
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)