في 18 يوليو 2023 ، بتوقيت بكين ، عانت شركة Ocean BNO من هجوم قرض سريع ، وحقق المهاجم ربحًا بنحو 500 ألف دولار أمريكي.
! [20230718161919783image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-38970f9230-dd1a6f-7649e1)
أجرى SharkTeam تحليلًا تقنيًا لهذه الحادثة لأول مرة ، ولخص الاحتياطات الأمنية ، على أمل أن تتعلم مشاريع المتابعة منه ، وأن يبني بشكل مشترك خط دفاع أمني لصناعة blockchain.
عنوان المهاجم:
0xa6566574edc60d7b2adbacedb71d5142cf2677fb
عقد الهجوم:
0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd
العقد المهاجم:
0xdCA503449899d5649D32175a255A8835A03E4006
هجوم المعاملات:
0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9
عملية الهجوم:
(1) اقترض المهاجم (0xa6566574) 286449 عملة BNO من خلال قرض فلاش pancakeSwap.
! [20230718161449018image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-f469426182-dd1a6f-7649e1)
(2) ثم قم باستدعاء وظيفة ال stockNft للعقد المهاجم (0xdCA50344) لتعهد اثنين من nft.
! [20230718161457306image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-04edd0e58c-dd1a6f-7649e1)
(3) ثم اتصل بوظيفة التعهد للعقد المهاجم (0xdCA50344) لتعهد عملات 277856 BNO.
! [20230718161633397image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-869690e6f1-dd1a6f-7649e1)
(4) استدعاء وظيفة سحب الطوارئ من العقد المهاجم (0xdCA50344) لاستخراج جميع BNO
! [20230718161641122image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-f71a2770dd-dd1a6f-7649e1)
(5) ثم قم باستدعاء وظيفة unstakeNft للعقد المهاجم (0xdCA50344) ، واسترجع الرقمين المتعهد بهما واحصل على رموز BNO الإضافية.
! [20230718161732948image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-029563c095-dd1a6f-7649e1)
(6) كرر العملية المذكورة أعلاه للحصول باستمرار على رموز BNO إضافية
! [20230718161752651image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-97713b8e2d-dd1a6f-7649e1)
(7) بعد سداد القرض السريع ، استبدل جميع رموز BNO بـ 50.5W BUSD واترك السوق مع الربح.
! [20230718161800166image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-32ec4d3c8e-dd1a6f-7649e1)
السبب الجذري لهذا الهجوم هو: هناك مشكلة في آلية حساب المكافأة ومنطق التفاعل لوظيفة السحب الطارئ في العقد المهاجم (0xdCA50344) ، مما يتسبب في حصول المستخدم على رمز مكافأة إضافي بعد سحب المبلغ الأساسي.
! [20230718161812689image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-0a81429476-dd1a6f-7649e1)
! [20230718161820027image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-924ee76fca-dd1a6f-7649e1)
يوفر العقد وظيفة EmergencyWithdraw لسحب الرموز في حالات الطوارئ ، ويمسح إجمالي الرهن العقاري والمكافأة للديون للمهاجم ، ولكنه لا يمسح متغير nftAddition الخاص بالمهاجم ، ويتم أيضًا حساب متغير nftAddition من خلال متغير allstake.
! [20230718161834850image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-5a2de1b17c-dd1a6f-7649e1)
في وظيفة unstakeNft ، سيستمر احتساب المكافأة الحالية للمستخدم ، وإذا لم تتم إعادة تعيين متغير nftAddition إلى الصفر ، فستظل الدالة انتظارًا تعيد قيمة إضافية لمكافأة BNO ، مما يتسبب في حصول المهاجم على رموز BNO إضافية.
! [20230718161842539image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-a4c8cc20c9-dd1a6f-7649e1)
ردًا على هذا الهجوم ، يجب اتباع الاحتياطات التالية أثناء عملية التطوير:
(1) عند حساب المكافآت ، تحقق مما إذا كان المستخدم قد سحب رأس المال.
(2) قبل بدء المشروع عبر الإنترنت ، من الضروري طلب المساعدة الفنية من فريق تدقيق محترف تابع لجهة خارجية.