Analisis Serangan Re-entrance Pinjaman Flash pada Jarvis Network
Baru-baru ini, sebuah proyek bernama Jarvis_Network mengalami serangan reentrancy pada Pinjaman Flash, yang mengakibatkan kerugian sekitar 66,3 ribu token MATIC. Peristiwa ini terjadi pada malam 15 Januari 2023.
Melalui analisis mendalam terhadap tumpukan panggilan transaksi, kami menemukan bahwa penyerang memanfaatkan kerentanan reentrancy. Dalam proses reentrancy, fungsi yang sama dari kontrak yang sama dipanggil beberapa kali, tetapi nilai kembalian dari setiap panggilan memiliki perbedaan yang sangat besar. Perbedaan ini terutama terlihat pada fungsi remove_liquidity.
Serangan reentrancy terjadi selama proses penghapusan likuiditas. Karena Polygon dan EVM adalah rantai homomorfik, saat MATIC ditransfer ke kontrak, logika reentrancy kontrak terpicu. Dengan analisis rinci pada stack pemanggilan, kami menemukan masalah berada di fungsi getUnderlyingPrice.
Penyelidikan lebih lanjut menunjukkan bahwa penyerang memanfaatkan celah waktu dalam pembaruan variabel self.D saat menghapus likuiditas. Dalam kondisi normal, alur metode remove_liquidity seharusnya adalah: 1) menghancurkan LP pengguna; 2) mengirimkan dana yang dipertaruhkan kepada pengguna; 3) memperbarui self.D. Namun, penyerang melakukan operasi reentrancy pada langkah kedua, yang mengakibatkan kesalahan serius dalam perhitungan harga.
Meskipun fungsi remove_liquidity menggunakan dekorator @nonreentrant('lock') untuk mencegah reentrasi, karena penyerang masuk kembali ke kontrak lain untuk meminjam dana, kunci reentrasi ini tidak berfungsi.
Serangan kali ini terutama mengungkapkan dua masalah:
Logika modifikasi variabel terletak setelah panggilan eksternal, menyebabkan anomali pengambilan harga.
Reentrancy antar kontrak membuat kunci reentrancy tidak berfungsi.
Untuk mencegah serangan serupa, disarankan agar pihak proyek mengambil langkah-langkah berikut:
Pastikan kode telah menjalani audit keamanan yang ketat.
Letakkan modifikasi variabel sebelum pemanggilan eksternal.
Menggunakan metode multi-sumber data untuk mendapatkan harga.
Mengikuti norma pengkodean "pertama menilai, kemudian menulis ke variabel, lalu melakukan panggilan eksternal" (Checks-Effects-Interactions).
Dengan mengambil langkah-langkah ini, proyek dapat secara signifikan meningkatkan keamanan dan stabilitasnya, serta memberikan layanan yang lebih andal bagi pengguna.
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.
9 Suka
Hadiah
9
2
Bagikan
Komentar
0/400
WalletAnxietyPatient
· 8jam yang lalu
Investor ritel yang suka bermain dan tidak berpengalaman, ingat untuk mencadangkan Kunci Pribadi tepat waktu.
Bahasa konten: Mandarin
Komentar yang diberikan:
Tidak melakukan audit kontrak dan menderita kerugian ini.
Lihat AsliBalas0
LiquidatedNotStirred
· 8jam yang lalu
Sekali lagi reentrancy haha, seharusnya sudah dikunci.
Jarvis Network mengalami serangan reentrancy Pinjaman Flash kehilangan 66.3 ribu MATIC
Analisis Serangan Re-entrance Pinjaman Flash pada Jarvis Network
Baru-baru ini, sebuah proyek bernama Jarvis_Network mengalami serangan reentrancy pada Pinjaman Flash, yang mengakibatkan kerugian sekitar 66,3 ribu token MATIC. Peristiwa ini terjadi pada malam 15 Januari 2023.
Melalui analisis mendalam terhadap tumpukan panggilan transaksi, kami menemukan bahwa penyerang memanfaatkan kerentanan reentrancy. Dalam proses reentrancy, fungsi yang sama dari kontrak yang sama dipanggil beberapa kali, tetapi nilai kembalian dari setiap panggilan memiliki perbedaan yang sangat besar. Perbedaan ini terutama terlihat pada fungsi remove_liquidity.
Serangan reentrancy terjadi selama proses penghapusan likuiditas. Karena Polygon dan EVM adalah rantai homomorfik, saat MATIC ditransfer ke kontrak, logika reentrancy kontrak terpicu. Dengan analisis rinci pada stack pemanggilan, kami menemukan masalah berada di fungsi getUnderlyingPrice.
Penyelidikan lebih lanjut menunjukkan bahwa penyerang memanfaatkan celah waktu dalam pembaruan variabel self.D saat menghapus likuiditas. Dalam kondisi normal, alur metode remove_liquidity seharusnya adalah: 1) menghancurkan LP pengguna; 2) mengirimkan dana yang dipertaruhkan kepada pengguna; 3) memperbarui self.D. Namun, penyerang melakukan operasi reentrancy pada langkah kedua, yang mengakibatkan kesalahan serius dalam perhitungan harga.
Meskipun fungsi remove_liquidity menggunakan dekorator @nonreentrant('lock') untuk mencegah reentrasi, karena penyerang masuk kembali ke kontrak lain untuk meminjam dana, kunci reentrasi ini tidak berfungsi.
Serangan kali ini terutama mengungkapkan dua masalah:
Untuk mencegah serangan serupa, disarankan agar pihak proyek mengambil langkah-langkah berikut:
Dengan mengambil langkah-langkah ini, proyek dapat secara signifikan meningkatkan keamanan dan stabilitasnya, serta memberikan layanan yang lebih andal bagi pengguna.
Bahasa konten: Mandarin
Komentar yang diberikan:
Tidak melakukan audit kontrak dan menderita kerugian ini.