Pada 18 Juli 2023, waktu Beijing, Ocean BNO mengalami serangan flash loan, dan penyerang telah mendapat untung sekitar 500.000 dolar AS.
SharkTeam melakukan analisis teknis atas insiden ini untuk pertama kalinya, dan merangkum tindakan pencegahan keamanan, berharap proyek tindak lanjut dapat belajar darinya dan bersama-sama membangun garis pertahanan keamanan untuk industri blockchain.
(1) Penyerang (0xa6566574) meminjam 286.449 BNO melalui flash loan pancakeSwap.
(2) Kemudian panggil fungsi stakeNft dari kontrak yang diserang (0xdCA50344) untuk menjaminkan dua nft.
(3) Kemudian panggil fungsi jaminan dari kontrak yang diserang (0xdCA50344) untuk menjaminkan 277856 koin BNO.
(4) Panggil fungsi emergencyWithdraw dari kontrak yang diserang (0xdCA50344) untuk mengekstrak semua BNO
(5) Kemudian panggil fungsi unstakeNft dari kontrak yang diserang (0xdCA50344), ambil dua nft yang dijanjikan dan terima token BNO tambahan.
(6) Ulangi proses di atas untuk terus mendapatkan token BNO tambahan
(7) Setelah melunasi flash loan, tukarkan semua token BNO dengan 50,5W BUSD dan tinggalkan pasar dengan untung.
Kedua, analisis kerentanan
Akar penyebab serangan ini adalah: ada masalah dengan mekanisme penghitungan hadiah dan logika interaksi dari fungsi penarikan darurat dalam kontrak yang diserang (0xdCA50344), yang mengakibatkan pengguna mendapatkan token hadiah ekstra setelah menarik prinsipal.
Kontrak menyediakan fungsi emergencyWithdraw untuk penarikan token secara darurat, dan menghapus total hipotek penyerang dan total hutang rewardDebt, tetapi tidak menghapus variabel nftAddtion penyerang, dan variabel nftAddition juga dihitung melalui variabel allstake.
Dalam fungsi unstakeNft, hadiah pengguna saat ini masih akan dihitung, dan jika variabel nftAddition tidak disetel ulang ke nol, fungsi pendingFit masih akan mengembalikan nilai hadiah BNO tambahan, menyebabkan penyerang mendapatkan token BNO tambahan.
Ketiga, Rekomendasi Keamanan
Menanggapi serangan ini, kita harus mengikuti tindakan pencegahan berikut selama proses pengembangan:
(1) Saat menghitung hadiah, verifikasi apakah pengguna telah menarik pokoknya.
(2) Sebelum proyek online, perlu mencari bantuan teknis dari tim audit profesional pihak ketiga.
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.
Analisis prinsip kejadian serangan BNO
Pada 18 Juli 2023, waktu Beijing, Ocean BNO mengalami serangan flash loan, dan penyerang telah mendapat untung sekitar 500.000 dolar AS.
SharkTeam melakukan analisis teknis atas insiden ini untuk pertama kalinya, dan merangkum tindakan pencegahan keamanan, berharap proyek tindak lanjut dapat belajar darinya dan bersama-sama membangun garis pertahanan keamanan untuk industri blockchain.
1. Analisis Peristiwa
Alamat penyerang:
0xa6566574edc60d7b2adbacedb71d5142cf2677fb
Kontrak serangan:
0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd
Kontrak yang diserang:
0xdCA503449899d5649D32175a255A8835A03E4006
Transaksi penyerangan:
0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9
Proses serangan:
(1) Penyerang (0xa6566574) meminjam 286.449 BNO melalui flash loan pancakeSwap.
(2) Kemudian panggil fungsi stakeNft dari kontrak yang diserang (0xdCA50344) untuk menjaminkan dua nft.
(3) Kemudian panggil fungsi jaminan dari kontrak yang diserang (0xdCA50344) untuk menjaminkan 277856 koin BNO.
(4) Panggil fungsi emergencyWithdraw dari kontrak yang diserang (0xdCA50344) untuk mengekstrak semua BNO
(5) Kemudian panggil fungsi unstakeNft dari kontrak yang diserang (0xdCA50344), ambil dua nft yang dijanjikan dan terima token BNO tambahan.
(6) Ulangi proses di atas untuk terus mendapatkan token BNO tambahan
(7) Setelah melunasi flash loan, tukarkan semua token BNO dengan 50,5W BUSD dan tinggalkan pasar dengan untung.
Kedua, analisis kerentanan
Akar penyebab serangan ini adalah: ada masalah dengan mekanisme penghitungan hadiah dan logika interaksi dari fungsi penarikan darurat dalam kontrak yang diserang (0xdCA50344), yang mengakibatkan pengguna mendapatkan token hadiah ekstra setelah menarik prinsipal.
Kontrak menyediakan fungsi emergencyWithdraw untuk penarikan token secara darurat, dan menghapus total hipotek penyerang dan total hutang rewardDebt, tetapi tidak menghapus variabel nftAddtion penyerang, dan variabel nftAddition juga dihitung melalui variabel allstake.
Dalam fungsi unstakeNft, hadiah pengguna saat ini masih akan dihitung, dan jika variabel nftAddition tidak disetel ulang ke nol, fungsi pendingFit masih akan mengembalikan nilai hadiah BNO tambahan, menyebabkan penyerang mendapatkan token BNO tambahan.
Ketiga, Rekomendasi Keamanan
Menanggapi serangan ini, kita harus mengikuti tindakan pencegahan berikut selama proses pengembangan:
(1) Saat menghitung hadiah, verifikasi apakah pengguna telah menarik pokoknya.
(2) Sebelum proyek online, perlu mencari bantuan teknis dari tim audit profesional pihak ketiga.