Analisis Serangan Re-entrancy Pinjaman Flash pada Jarvis Network
Pada 15 Januari 2023, proyek Jarvis_Network diserang oleh peretas, kehilangan 663101 MATIC. Melalui analisis data transaksi, ditemukan bahwa serangan ini melibatkan Pinjaman Flash dan kerentanan reentrancy.
Penyerang memanfaatkan celah dalam fungsi remove_liquidity. Saat menghapus likuiditas, fungsi ini akan mengembalikan token yang ditambahkan oleh pengguna. Karena Polygon dan EVM adalah rantai yang setara, pengiriman MATIC ke kontrak akan memicu logika reentrancy kontrak.
Fokus utama adalah pada proses pemanggilan fungsi getUnderlyingPrice. Fungsi ini melibatkan interaksi antara beberapa kontrak, di mana beberapa kontrak tidak bersifat open source. Melalui analisis, ditemukan bahwa masalah terletak pada nilai kembali dari fungsi get_virtual_price. Nilai kembali dari fungsi ini menunjukkan perbedaan yang signifikan sebelum dan sesudah reentrancy.
Secara khusus, pembaruan variabel self.D terjadi setelah transfer token. Penyerang mentransfer MATIC ke kontrak penyerang saat menghapus likuiditas. Saat memanggil fungsi fallback, penyerang terlebih dahulu memeriksa harga token tertentu. Karena pembaruan self.D tertinggal dari transfer, ini menyebabkan kesalahan dalam pengambilan harga sebelumnya.
Proses penghapusan likuiditas mencakup: 1) menghancurkan token LP pengguna; 2) mengirimkan dana yang dipertaruhkan kepada pengguna; 3) memperbarui nilai self.D. self.D digunakan untuk perhitungan harga, dan akan diperbarui saat menambah dan menghapus likuiditas. Penyerang memanfaatkan celah pada likuiditas besar dan momen pembaruan self.D, melakukan reentrancy pada langkah 2, dan meminjam dengan harga 10 kali lipat dari harga asli.
Meskipun fungsi remove_liquidity menggunakan '@nonreentrant('lock')' decorator untuk mencegah reentrancy, penyerang berhasil menghindari mekanisme perlindungan ini melalui peminjaman lintas kontrak.
Serangan ini mengungkapkan kekurangan proyek dalam logika modifikasi variabel dan keamanan panggilan antar kontrak. Untuk mencegah serangan serupa, disarankan agar pihak proyek mengambil langkah-langkah berikut:
Melakukan audit keamanan yang ketat.
Tempatkan modifikasi variabel sebelum pemanggilan eksternal.
Menggunakan metode multi-sumber data untuk mendapatkan harga.
Dengan langkah-langkah ini, keamanan dan stabilitas proyek dapat ditingkatkan secara signifikan, mencegah terjadinya kembali insiden serangan serupa.
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.
22 Suka
Hadiah
22
6
Bagikan
Komentar
0/400
NFTHoarder
· 07-21 19:29
Pengujian proyek ini terlalu lemah, sekali saja sudah tembus.
Lihat AsliBalas0
RektDetective
· 07-19 06:12
Ada yang lagi gagal matic transfer tidak ada pemeriksaan? pemula nulis kode?
Lihat AsliBalas0
DuskSurfer
· 07-18 23:29
Masih berbaring menyalin kontrak, bahkan belum paham tentang reentrancy~
Lihat AsliBalas0
StableGenius
· 07-18 23:29
lmao hari lain, hack lain... seperti yang diprediksi sejujurnya
Lihat AsliBalas0
HypotheticalLiquidator
· 07-18 23:18
Masalah lama muncul lagi, belum mengunci kunci re-entrance?
Lihat AsliBalas0
failed_dev_successful_ape
· 07-18 23:11
tim proyek tidur, orang lain di sini sedang membuka pintu dengan cara paksa~
Jarvis Network mengalami serangan reentrancy Pinjaman Flash dengan kerugian 66 ribu MATIC
Analisis Serangan Re-entrancy Pinjaman Flash pada Jarvis Network
Pada 15 Januari 2023, proyek Jarvis_Network diserang oleh peretas, kehilangan 663101 MATIC. Melalui analisis data transaksi, ditemukan bahwa serangan ini melibatkan Pinjaman Flash dan kerentanan reentrancy.
Penyerang memanfaatkan celah dalam fungsi remove_liquidity. Saat menghapus likuiditas, fungsi ini akan mengembalikan token yang ditambahkan oleh pengguna. Karena Polygon dan EVM adalah rantai yang setara, pengiriman MATIC ke kontrak akan memicu logika reentrancy kontrak.
Fokus utama adalah pada proses pemanggilan fungsi getUnderlyingPrice. Fungsi ini melibatkan interaksi antara beberapa kontrak, di mana beberapa kontrak tidak bersifat open source. Melalui analisis, ditemukan bahwa masalah terletak pada nilai kembali dari fungsi get_virtual_price. Nilai kembali dari fungsi ini menunjukkan perbedaan yang signifikan sebelum dan sesudah reentrancy.
Secara khusus, pembaruan variabel self.D terjadi setelah transfer token. Penyerang mentransfer MATIC ke kontrak penyerang saat menghapus likuiditas. Saat memanggil fungsi fallback, penyerang terlebih dahulu memeriksa harga token tertentu. Karena pembaruan self.D tertinggal dari transfer, ini menyebabkan kesalahan dalam pengambilan harga sebelumnya.
Proses penghapusan likuiditas mencakup: 1) menghancurkan token LP pengguna; 2) mengirimkan dana yang dipertaruhkan kepada pengguna; 3) memperbarui nilai self.D. self.D digunakan untuk perhitungan harga, dan akan diperbarui saat menambah dan menghapus likuiditas. Penyerang memanfaatkan celah pada likuiditas besar dan momen pembaruan self.D, melakukan reentrancy pada langkah 2, dan meminjam dengan harga 10 kali lipat dari harga asli.
Meskipun fungsi remove_liquidity menggunakan '@nonreentrant('lock')' decorator untuk mencegah reentrancy, penyerang berhasil menghindari mekanisme perlindungan ini melalui peminjaman lintas kontrak.
Serangan ini mengungkapkan kekurangan proyek dalam logika modifikasi variabel dan keamanan panggilan antar kontrak. Untuk mencegah serangan serupa, disarankan agar pihak proyek mengambil langkah-langkah berikut:
Dengan langkah-langkah ini, keamanan dan stabilitas proyek dapat ditingkatkan secara signifikan, mencegah terjadinya kembali insiden serangan serupa.