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
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
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.