Jarvis Network mengalami serangan reentrancy Pinjaman Flash dengan kerugian 66,3 ribu MATIC

robot
Pembuatan abstrak sedang berlangsung

Analisis Serangan Re-entrancy Pinjaman Flash pada Proyek Jarvis Network

Pada 15 Januari 2023, proyek Jarvis_Network mengalami serangan di jaringan Polygon, mengakibatkan kerugian sekitar 663.000 MATIC. Analisis menunjukkan bahwa penyerang memanfaatkan Pinjaman Flash dan kerentanan re-entrance untuk melakukan serangan.

Analisis Insiden Serangan Re-entrance Pinjaman Flash Jarvis Network

Analisis tumpukan panggilan transaksi serangan menunjukkan bahwa selama proses reentrancy, saat memanggil fungsi yang sama pada kontrak yang sama, parameter yang dimasukkan sama tetapi nilai yang dikembalikan memiliki perbedaan yang signifikan. Nilai yang dikembalikan sebelum dan sesudah reentrancy masing-masing adalah:

  • Sebelum masuk kembali: 1002157321772769944
  • Re-enter setelah: 10091002696492234934

Analisis Kejadian Serangan Reentrancy Pinjaman Flash Jarvis Network

Reentrancy terjadi dalam fungsi remove_liquidity. Fungsi ini akan mengembalikan token yang ditambahkan pengguna saat menghapus likuiditas. Karena Polygon kompatibel dengan EVM, reentrancy dipicu saat MATIC ditransfer ke kontrak.

Jarvis Network Pinjaman Flash重入攻击事件分析

Analisis mendalam menunjukkan bahwa masalah terletak pada implementasi fungsi getUnderlyingPrice. Fungsi ini melibatkan serangkaian perhitungan internal dan panggilan eksternal, di mana kuncinya adalah nilai kembali dari fungsi get_virtual_price. Nilai kembali dari fungsi ini dipengaruhi oleh variabel self.D, dan pembaruan self.D terjadi setelah transfer token.

Analisis Kejadian Serangan Re-entrance Pinjaman Flash Jarvis Network

Penyerang saat menghapus likuiditas, MATIC dipindahkan ke kontrak penyerang, kemudian melalui callback terlebih dahulu memeriksa harga token. Karena self.D belum diperbarui, menyebabkan kesalahan dalam mendapatkan harga. Penyerang memanfaatkan selisih waktu ini, pada saat reentrance menaikkan harga pinjaman sekitar 10 kali lipat.

Analisis Kasus Serangan Re-Entrancy Pinjaman Flash Jarvis Network

Meskipun fungsi remove_liquidity menggunakan dekorator @nonreentrant('lock') untuk mencegah reentrancy, penyerang berhasil melewati mekanisme perlindungan ini melalui reentrancy antar kontrak.

Analisis Kejadian Serangan Re-Entry Pinjaman Flash Jarvis Network

Serangan kali ini mengungkapkan beberapa masalah kunci:

  1. Logika modifikasi variabel terletak setelah panggilan eksternal, menyebabkan anomali dalam pengambilan harga.
  2. Reentrancy lintas kontrak membuat kunci reentrancy tidak berlaku.
  3. Tidak mengikuti pola "Pemeriksaan - Efek - Interaksi" (Checks-Effects-Interactions).

Analisis Kejadian Serangan Re-entrancy Pinjaman Flash Jarvis Network

Untuk mencegah serangan serupa, disarankan kepada pihak proyek:

  • Melakukan audit keamanan yang ketat
  • Tempatkan modifikasi variabel sebelum pemanggilan eksternal
  • Menggunakan metode multi-sumber data untuk mendapatkan harga
  • Mengikuti spesifikasi pengkodean "Pemeriksaan-Validasi-Interaksi"

Dengan langkah-langkah ini, keamanan dan stabilitas proyek dapat ditingkatkan secara signifikan.

Analisis Insiden Serangan Re-entrancy Pinjaman Flash Jarvis Network

Analisis Kejadian Serangan Reentrancy Pinjaman Flash Jarvis Network

Analisis Insiden Serangan Re-entrancy Pinjaman Flash Jarvis Network

Analisis insiden serangan reentrancy Pinjaman Flash Jarvis Network

Analisis Kejadian Serangan Re-entrancy Pinjaman Flash Jarvis Network

Lihat Asli
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.
  • Hadiah
  • Komentar
  • Posting ulang
  • Bagikan
Komentar
0/400
Tidak ada komentar
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)