تحليل هجوم إعادة دخول القروض السريعة على شبكة جارفس
في 15 يناير 2023، تعرض مشروع Jarvis_Network لهجوم كبير، مما أدى إلى خسارة 663,101 من MATIC. استخدم هذا الهجوم مزيجًا من القروض السريعة وهجوم إعادة الإدخال، مما كشف عن ثغرات خطيرة في عقد المشروع.
استغل المهاجم ثغرة في دالة remove_liquidity بشكل ذكي. تقوم هذه الدالة بإرجاع الرموز المضافة من قبل المستخدم عند إزالة السيولة. نظرًا لأن سلسلة Polygon متوافقة مع EVM، فإن تحويل MATIC إلى العقد سيؤدي إلى تفعيل منطق إعادة الدخول في العقد.
تحليل كشف أن المفتاح للهجوم كان في استدعاء دالة getUnderlyingPrice. هذه الدالة تعيد أسعارًا مختلفة بشكل ملحوظ قبل وبعد إعادة الدخول: قبل إعادة الدخول كانت 1002157321772769944، وبعد إعادة الدخول بلغت 10091002696492234934، بفارق يقارب 10 أضعاف.
جذر المشكلة يكمن في توقيت تحديث المتغير self.D في العقد. تسلسل تنفيذ دالة remove_liquidity هو: 1) تدمير رموز LP الخاصة بالمستخدم؛ 2) إرسال الأموال المرهونة إلى المستخدم؛ 3) تحديث self.D. قام المهاجم بإعادة الدخول في الخطوة الثانية، مستغلاً القيمة غير المحدثة لـ self.D للحصول على معلومات سعر خاطئة، وبالتالي قام بعمليات اقتراض مربحة.
على الرغم من أن دالة remove_liquidity تستخدم الزخرفة @nonreentrant('lock') لمنع إعادة الدخول، إلا أن هذا التدبير الوقائي لم ينجح بسبب أن الهجوم ينطوي على عمليات عبر العقود.
تسلط هذه الحادثة الضوء على عدة مبادئ أمان رئيسية:
يجب إتمام تعديل المتغيرات قبل الاستدعاء الخارجي لتجنب عدم التناسق في الحالة.
يجب أن تعتمد آلية الحصول على الأسعار على مصادر بيانات متعددة لتعزيز الموثوقية.
يجب أن تتبع منطق الشفرة نمط "التحقق - التأثير - التفاعل" (Checks-Effects-Interactions)، أي يجب أولاً إجراء فحص الشروط، ثم تعديل متغيرات الحالة، وأخيراً القيام بالاستدعاءات الخارجية.
تثبت هذه الهجمة مرة أخرى أن تدقيق أمان العقود الذكية أمر بالغ الأهمية. يجب على المشروع أن يولي مزيدًا من الاهتمام لأمان العقود، والتأكد من أن الكود قد تم مراجعته بدقة وشمولية لتجنب ظهور ثغرات مشابهة.
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تعرضت شبكة جارفيز لهجوم إعادة دخول من القروض السريعة مما أدى إلى خسارة 660000 MATIC
تحليل هجوم إعادة دخول القروض السريعة على شبكة جارفس
في 15 يناير 2023، تعرض مشروع Jarvis_Network لهجوم كبير، مما أدى إلى خسارة 663,101 من MATIC. استخدم هذا الهجوم مزيجًا من القروض السريعة وهجوم إعادة الإدخال، مما كشف عن ثغرات خطيرة في عقد المشروع.
استغل المهاجم ثغرة في دالة remove_liquidity بشكل ذكي. تقوم هذه الدالة بإرجاع الرموز المضافة من قبل المستخدم عند إزالة السيولة. نظرًا لأن سلسلة Polygon متوافقة مع EVM، فإن تحويل MATIC إلى العقد سيؤدي إلى تفعيل منطق إعادة الدخول في العقد.
تحليل كشف أن المفتاح للهجوم كان في استدعاء دالة getUnderlyingPrice. هذه الدالة تعيد أسعارًا مختلفة بشكل ملحوظ قبل وبعد إعادة الدخول: قبل إعادة الدخول كانت 1002157321772769944، وبعد إعادة الدخول بلغت 10091002696492234934، بفارق يقارب 10 أضعاف.
جذر المشكلة يكمن في توقيت تحديث المتغير self.D في العقد. تسلسل تنفيذ دالة remove_liquidity هو: 1) تدمير رموز LP الخاصة بالمستخدم؛ 2) إرسال الأموال المرهونة إلى المستخدم؛ 3) تحديث self.D. قام المهاجم بإعادة الدخول في الخطوة الثانية، مستغلاً القيمة غير المحدثة لـ self.D للحصول على معلومات سعر خاطئة، وبالتالي قام بعمليات اقتراض مربحة.
على الرغم من أن دالة remove_liquidity تستخدم الزخرفة @nonreentrant('lock') لمنع إعادة الدخول، إلا أن هذا التدبير الوقائي لم ينجح بسبب أن الهجوم ينطوي على عمليات عبر العقود.
تسلط هذه الحادثة الضوء على عدة مبادئ أمان رئيسية:
تثبت هذه الهجمة مرة أخرى أن تدقيق أمان العقود الذكية أمر بالغ الأهمية. يجب على المشروع أن يولي مزيدًا من الاهتمام لأمان العقود، والتأكد من أن الكود قد تم مراجعته بدقة وشمولية لتجنب ظهور ثغرات مشابهة.