تحليل هجوم إعادة الإدخال للقروض السريعة على مشروع Jarvis Network
في 15 يناير 2023، تعرض مشروع Jarvis_Network لهجوم، مما أدى إلى خسارة 663,101 من MATIC. استغل هذا الهجوم بشكل رئيسي القروض السريعة وثغرة الإعادة، مما أدى إلى فقدان أموال المشروع.
من خلال تحليل مكدس استدعاء المعاملات، تم اكتشاف أن المهاجمين نفذوا هجوم إعادة الإدخال في دالة remove_liquidity. هذه الدالة مسؤولة عن إزالة السيولة وإعادة رموز المستخدم. نظرًا لأن Polygon له هيكل مشابه لسلسلة EVM، تم تفعيل إعادة إدخال العقد أثناء عملية نقل MATIC.
تحدث هجمات إعادة الدخول في مرحلة استعلام الأسعار. يتم نقل MATIC إلى عقد المهاجم عند إزالة السيولة. خلال عملية الاستدعاء، استفسر المهاجم أولاً عن سعر رمز معين. نظرًا لتأخر تحديث المتغير self.D في العقد عن عملية التحويل، أدى ذلك إلى حدوث خطأ في الحصول على السعر في المرحلة السابقة.
تدفق تنفيذ دالة remove_liquidity كالتالي:
حرق رموز LP الخاصة بالمستخدم
إرسال أموال الرهن إلى المستخدم
تحديث متغير self.D
تُستخدم متغيرات self.D في حساب الأسعار، ويتم تحديثها عند إضافة وإزالة السيولة. استغل المهاجمون عمليات التمويل الكبيرة، مما أدى إلى زيادة كبيرة في قيمة self.D عند إضافة السيولة، بينما لم يتم تحديثها في الوقت المناسب عند الإزالة.
على الرغم من أن دالة remove_liquidity تستخدم الزخرفة @nonreentrant('lock') لمنع إعادة الدخول، إلا أن المهاجم تمكن من تجاوز هذا القيد من خلال الاقتراض عبر العقود.
هجوم هذا كشف عن وجود ثغرات أمنية في كود المشروع. لتجنب مشاكل مماثلة، يُنصح فريق المشروع باتخاذ التدابير التالية:
إجراء تدقيق أمني صارم
ضع عمليات تعديل المتغيرات قبل الاستدعاءات الخارجية
من خلال تحسين منطق الشفرة وتعزيز تدابير الأمان، يمكن تعزيز أمان واستقرار المشروع بشكل فعال، ومنع حدوث هجمات مشابهة مرة أخرى.
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تعرضت شبكة جارفيز لهجوم إعادة دخول من القروض السريعة وخسرت 663,101 من MATIC
تحليل هجوم إعادة الإدخال للقروض السريعة على مشروع Jarvis Network
في 15 يناير 2023، تعرض مشروع Jarvis_Network لهجوم، مما أدى إلى خسارة 663,101 من MATIC. استغل هذا الهجوم بشكل رئيسي القروض السريعة وثغرة الإعادة، مما أدى إلى فقدان أموال المشروع.
من خلال تحليل مكدس استدعاء المعاملات، تم اكتشاف أن المهاجمين نفذوا هجوم إعادة الإدخال في دالة remove_liquidity. هذه الدالة مسؤولة عن إزالة السيولة وإعادة رموز المستخدم. نظرًا لأن Polygon له هيكل مشابه لسلسلة EVM، تم تفعيل إعادة إدخال العقد أثناء عملية نقل MATIC.
تحدث هجمات إعادة الدخول في مرحلة استعلام الأسعار. يتم نقل MATIC إلى عقد المهاجم عند إزالة السيولة. خلال عملية الاستدعاء، استفسر المهاجم أولاً عن سعر رمز معين. نظرًا لتأخر تحديث المتغير self.D في العقد عن عملية التحويل، أدى ذلك إلى حدوث خطأ في الحصول على السعر في المرحلة السابقة.
تدفق تنفيذ دالة remove_liquidity كالتالي:
تُستخدم متغيرات self.D في حساب الأسعار، ويتم تحديثها عند إضافة وإزالة السيولة. استغل المهاجمون عمليات التمويل الكبيرة، مما أدى إلى زيادة كبيرة في قيمة self.D عند إضافة السيولة، بينما لم يتم تحديثها في الوقت المناسب عند الإزالة.
على الرغم من أن دالة remove_liquidity تستخدم الزخرفة @nonreentrant('lock') لمنع إعادة الدخول، إلا أن المهاجم تمكن من تجاوز هذا القيد من خلال الاقتراض عبر العقود.
هجوم هذا كشف عن وجود ثغرات أمنية في كود المشروع. لتجنب مشاكل مماثلة، يُنصح فريق المشروع باتخاذ التدابير التالية:
من خلال تحسين منطق الشفرة وتعزيز تدابير الأمان، يمكن تعزيز أمان واستقرار المشروع بشكل فعال، ومنع حدوث هجمات مشابهة مرة أخرى.