المصدر: Beosin
في وقت متأخر من ليلة 5 مارس 2024 بتوقيت بكين وبحسب منصة Beosin Trace، تعرض مشروع عقد WooPPV2 على سلسلة Arbitrum لهجوم تلاعب بالأسعار، مما تسبب في خسارة ما يقرب من 8.5 مليون دولار أمريكي. استخدم المتسللون القروض السريعة لإقراض عملات USDC.e وWoo، ثم أجروا عمليات تبادل رمزية متكررة من خلال عقد WooPPV2. بسبب عيوب في حساب سعر عقد WooPPV2، تمكن المتسللون من التلاعب بالسعر أثناء عملية التبادل، مما أدى إلى سرقة عدد كبير من رموز Woo. قام فريق Beosin الأمني بتحليل هذا الحادث على الفور.
تحليل الثغرات الأمنية
عقد WooPPV2 توجد وظيفة مبادلة في يمكن للمستخدمين استدعاء هذه الوظيفة لتبادل الرموز، وهذا بشكل أساسي التبادل بين USDC.e وWoo (يتم تحليل ما يلي بناءً على التبادل بين USDC.e وWoo)، حيث تكون الوظيفة يمثل متغير quoteToken USDC.e.
_sellQuote وظيفة منطق وظيفة _sellBase مشابه، فهو يحسب عدد الرموز المميزة التي سيتم تبادلها بناءً على السعر، ثم يرسل الرموز المميزة إلى المتصل. _sellQuote هي الدالة التي يتم استدعاؤها عندما يستخدم المتصل USDC.e لاسترداد رموز Woo. الوظائف الرئيسية هي الحالة و_calcBaseAmountSellQuote. تُستخدم الحالة لإرجاع البنية التي تحفظ سعر Woo. _calcBaseAmountSellQuote هو مبلغ الصرف المحسوب للمستخدم والسعر الجديد. وظيفة.
بعد ذلك ننظر إلى وظيفة _calcBaseAmountSellQuote منطق التنفيذ، baseAmount هو مبلغ الصرف المحسوب، والمنطق الرئيسي هو تقسيم مبلغ USDC.e على سعر Woo للحصول على مبلغ Woo الذي يمكن استبداله، ثم حساب السعر الجديد بعد التبادل بناءً على السعر الحالي ومبلغ الصرف.
وظيفة_sellBase ووظيفة _sellQuote نفس الشيء، باستثناء أن وظيفة _calcQuoteAmountSellBase مختلفة قليلاً، والمنطق الرئيسي هو ضرب كمية Woo في سعر Woo للحصول على كمية USDC.e التي يمكن استبدالها.
وفقًا لمنطق التبادل نحن يمكن العثور على سؤال واحد،يختلف منطق حساب كمية التبادل هذه عن نموذج المنتج الثابت للمقايضات التقليدية مثل Uniswap، حيث يقوم هذا النموذج بحساب الكمية مباشرة عن طريق الضرب والقسمة بناءً على السعر، بحيث لا يكون هناك انزلاق. في عملية التبادل، ولكن السعر سيتغير مع التغيير يتغير مع الصرف. إذا قام المتصل بالحساب بعناية، فيمكنه استخراج الرموز الموجودة بالداخل.
على سبيل المثال:
إذا كان هناك تتكون في البداية من 1000 رمز A و1000 رمز B في المجموعة، وسعر الرموز B هو 1. ثم إذا كنت تستخدم 500 رمز A، فيمكنك استبدالها بـ 500 رمز B. في هذا الوقت، يصبح المجمع 1500:500، وسيرتفع سعر الرمز B، على سبيل المثال، إلى 2. بعد ذلك، استخدم 500 رمز B تم تبادلها لاستبدال 1000 رمز A. يصبح المجمع النهائي 500: 1000، ويتم استخراج 500 رمز A من لا شيء.
في هذه الحادثة، استخدم المهاجم مشكلة الأمان هذه. دعونا نلقي نظرة على كيفية تنفيذ المهاجم للهجوم.
عملية الهجوم
هذه المرة استخدم المهاجم نفس أسلوب الهجوم عدة مرات، هنا نأخذ المعاملة 0xe80a16678b5008d5be1484ec6e9e77dc6307632030553405863ffb38c1f94266 كمثال.
1. أقرض المهاجم أكثر من 10 ملايين USDC.e و2.72 مليون رمز Woo من خلال القروض السريعة.
2. التالي، استخدم المهاجم 100000 USDC.e لتبادل رموز Woo ثلاث مرات، وفي هذا الوقت، يمكنك أن ترى أن سعر Woo لا يزال عند السعر الطبيعي، ويمتلك المهاجم حاليًا أكثر من 8 ملايين رمز Woo.
3. التالي، استخدم المهاجم مباشرة أكثر من 8 ملايين من رموز Woo للتبادل مقابل USDC.e. وبسبب المشاكل المذكورة أعلاه، في هذا الوقت، تم تبادل أكثر من 8 ملايين من رموز Woo بالأسعار العادية، وتم تبادل أكثر من 2 مليون USDC.e ووفقًا للصيغة المذكورة أعلاه، فإن سعر Woo في هذا الوقت هو 7، وهو أقل بنحو 10 ملايين مرة.
4. أخيرًا، بسبب Woo كان سعر الرمز المميز صغيرًا للغاية، مما دفع المهاجم إلى استخدام القليل جدًا من USDC.e لتبادل أكثر من 8 ملايين رمز Woo، وأعاد القرض السريع أخيرًا وغادر.
< strong>تتبع الأموال
بعد الاختراق، قام المهاجم بتحويل 200 ETH إلى Ethereum عبر الجسر عبر السلسلة وفي العنوان الموجود على سلسلة Arbitrum، يتم تخزين الـ 2000 ETH المتبقية في العنوان الموجود في سلسلة Arbitrum، وحتى وقت كتابة المقالة، لم يتم نقل أي من الأموال.
في ضوء هجوم التلاعب بالأسعار الذي حدث على سلسلة Arbitrum، يجب أن نكون على دراية بالمخاطر الأمنية في هذا المجال أهمية الأصول الافتراضية.