Analisis Serangan Re-Entry Pinjaman Flash pada Proyek Jarvis Network
Pada 15 Januari 2023, proyek Jarvis_Network mengalami serangan, kehilangan 663.101 MATIC. Serangan ini terutama memanfaatkan Pinjaman Flash dan kerentanan re-enter, yang menyebabkan kehilangan dana proyek.
Dengan menganalisis tumpukan panggilan transaksi, ditemukan bahwa penyerang melakukan serangan reentrancy dalam fungsi remove_liquidity. Fungsi ini bertanggung jawab untuk menghapus likuiditas dan mengembalikan token pengguna. Karena Polygon memiliki struktur yang mirip dengan rantai EVM, selama proses transfer MATIC, kontrak reentrancy terpicu.
Serangan reentrancy terjadi pada tahap pencarian harga. Penyerang memindahkan MATIC ke kontrak penyerang saat menghapus likuiditas. Dalam proses callback, penyerang terlebih dahulu memeriksa harga token tertentu. Karena pembaruan variabel self.D dalam kontrak tertunda setelah operasi transfer, hal ini menyebabkan kesalahan dalam pengambilan harga sebelumnya.
Proses eksekusi fungsi remove_liquidity adalah sebagai berikut:
Menghancurkan token LP pengguna
Mengirimkan dana staking kepada pengguna
Perbarui variabel self.D
self.D variable digunakan untuk perhitungan harga, dan akan diperbarui saat menambah dan menghapus likuiditas. Penyerang memanfaatkan operasi dana besar, yang menyebabkan nilai self.D meningkat secara signifikan saat menambah likuiditas, sementara saat menghapusnya tidak diperbarui dengan cepat.
Meskipun fungsi remove_liquidity menggunakan dekorator @nonreentrant('lock') untuk mencegah reentrancy, penyerang berhasil mengatasi batasan ini melalui pinjaman lintas kontrak.
Serangan kali ini mengungkapkan adanya celah keamanan dalam kode proyek. Untuk menghindari masalah serupa, disarankan agar pihak proyek mengambil langkah-langkah berikut:
Melakukan audit keamanan yang ketat
Tempatkan operasi modifikasi variabel sebelum pemanggilan eksternal
Menggunakan berbagai sumber data untuk mendapatkan harga
Mengikuti norma pengkodean "Pemeriksaan-Dampak-Interaksi" (Checks-Effects-Interactions)
Dengan mengoptimalkan logika kode dan memperkuat langkah-langkah keamanan, dapat secara efektif meningkatkan keamanan dan stabilitas proyek, serta mencegah serangan serupa terjadi lagi.
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.
23 Suka
Hadiah
23
9
Bagikan
Komentar
0/400
MEV_Whisperer
· 07-22 15:42
Panci ini hanya bisa dikembangkan.
Lihat AsliBalas0
AirdropCollector
· 07-22 15:27
Sekali lihat sudah tidak ingin membeli.
Lihat AsliBalas0
GateUser-e87b21ee
· 07-20 04:01
tim proyek防护不给力啊
Lihat AsliBalas0
StakeOrRegret
· 07-19 19:17
Satu proyek lagi telah disita...
Lihat AsliBalas0
ZenMiner
· 07-19 19:09
Apa yang sedang dilakukan petugas keamanan ini?
Lihat AsliBalas0
LayerZeroEnjoyer
· 07-19 19:09
Sigh, ini adalah reentrancy lagi, pola lama.
Lihat AsliBalas0
LiquidityOracle
· 07-19 19:05
Siapa yang menyebutkan bahwa menulis kode tidak serius
Lihat AsliBalas0
DecentralizedElder
· 07-19 19:01
Sekali lagi terkena hack, benar-benar tidak belajar dari pengalaman.
Lihat AsliBalas0
WhaleWatcher
· 07-19 18:54
Sebuah proyek setengah jadi lainnya terkena pukulan berat
Jarvis Network mengalami serangan reentrancy Pinjaman Flash dengan kerugian 663.101 MATIC
Analisis Serangan Re-Entry Pinjaman Flash pada Proyek Jarvis Network
Pada 15 Januari 2023, proyek Jarvis_Network mengalami serangan, kehilangan 663.101 MATIC. Serangan ini terutama memanfaatkan Pinjaman Flash dan kerentanan re-enter, yang menyebabkan kehilangan dana proyek.
Dengan menganalisis tumpukan panggilan transaksi, ditemukan bahwa penyerang melakukan serangan reentrancy dalam fungsi remove_liquidity. Fungsi ini bertanggung jawab untuk menghapus likuiditas dan mengembalikan token pengguna. Karena Polygon memiliki struktur yang mirip dengan rantai EVM, selama proses transfer MATIC, kontrak reentrancy terpicu.
Serangan reentrancy terjadi pada tahap pencarian harga. Penyerang memindahkan MATIC ke kontrak penyerang saat menghapus likuiditas. Dalam proses callback, penyerang terlebih dahulu memeriksa harga token tertentu. Karena pembaruan variabel self.D dalam kontrak tertunda setelah operasi transfer, hal ini menyebabkan kesalahan dalam pengambilan harga sebelumnya.
Proses eksekusi fungsi remove_liquidity adalah sebagai berikut:
self.D variable digunakan untuk perhitungan harga, dan akan diperbarui saat menambah dan menghapus likuiditas. Penyerang memanfaatkan operasi dana besar, yang menyebabkan nilai self.D meningkat secara signifikan saat menambah likuiditas, sementara saat menghapusnya tidak diperbarui dengan cepat.
Meskipun fungsi remove_liquidity menggunakan dekorator @nonreentrant('lock') untuk mencegah reentrancy, penyerang berhasil mengatasi batasan ini melalui pinjaman lintas kontrak.
Serangan kali ini mengungkapkan adanya celah keamanan dalam kode proyek. Untuk menghindari masalah serupa, disarankan agar pihak proyek mengambil langkah-langkah berikut:
Dengan mengoptimalkan logika kode dan memperkuat langkah-langkah keamanan, dapat secara efektif meningkatkan keamanan dan stabilitas proyek, serta mencegah serangan serupa terjadi lagi.