تم استهداف مشروع Poolz بسبب ثغرة في تجاوز السعة العددية، مما أدى إلى خسارة حوالي 665,000 دولار أمريكي
مؤخراً، أثار هجوم على مشروع Poolz اهتماماً واسعاً في مجتمع العملات المشفرة. وفقاً لبيانات مراقبة السلسلة، حدث الهجوم في 15 مارس 2023، وشمل ثلاثة شبكات: Ethereum و BNB Chain و Polygon. استغل المهاجمون ثغرة في الفائض الحسابي في العقد الذكي، مما أدى إلى سرقة كمية كبيرة من الرموز، تقدر قيمتها الإجمالية بحوالي 665,000 دولار.
تفاصيل الهجوم
نفذ المهاجمون هذا الهجوم من خلال الخطوات التالية:
أولاً، قمت بتبادل كمية معينة من رموز MNZ في بورصة لامركزية.
بعد ذلك تم استدعاء دالة CreateMassPools في عقد Poolz. كان من المفترض أن تسمح هذه الدالة للمستخدمين بإنشاء مجموعة من أحواض السيولة وتوفير السيولة الأولية، ولكن هناك ثغرة خطيرة فيها.
المشكلة تظهر في دالة getArraySum. تُستخدم هذه الدالة لحساب كمية السيولة الأولية التي يقدمها المستخدم، لكنها فشلت في معالجة حالات تجاوز السعة الصحيحة بشكل صحيح.
قام المهاجم ببراعة ببناء معلمات الإدخال بحيث تحتوي مصفوفة _StartAmount على أرقام تتجاوز الحد الأقصى لـ uint256. وهذا أدى إلى تجاوز نتيجة الجمع ، مما جعل القيمة المرجعة النهائية تساوي 1.
نظرًا لأن العقد استخدم القيمة الأصلية لـ _StartAmount عند تسجيل خصائص المسبح، بدلاً من عدد الرموز المميز الفعلي الذي تم نقله، يمكن للمهاجم ببساطة نقل 1 رمز مميز لإنشاء مسبح سيولة أعلى بكثير من الواقع.
أخيرًا، استغل المهاجم وظيفة السحب لسحب كميات كبيرة من الرموز غير المصرح بها، مما أكمل عملية الهجوم بأكملها.
الأصول المسروقة
أدى هذا الهجوم إلى خسائر في عدة رموز، بما في ذلك على سبيل المثال لا الحصر:
2,805,805 ميدل آي
525,134 ESNC
774,997 دون
2,007,504,238 ASW
6,510,689 كيلومتر
2,521,065 بولز
35,976,107 DCD
760,845 بورتكس
لقد قام المهاجمون بتحويل جزء من الرموز المسروقة إلى BNB، ولكن حتى وقت التقرير، لم يتم نقل هذه الأموال من عنوان المهاجم.
استخدم إصدارات أحدث من مترجم Solidity، حيث ستقوم هذه الإصدارات بإجراء فحوصات overflow تلقائيًا أثناء عملية الترجمة.
بالنسبة للمشاريع التي تستخدم إصدارات قديمة من Solidity، يُنصح بإدخال مكتبة SafeMath من OpenZeppelin للتعامل مع العمليات العددية، لتجنب مشاكل الفائض.
إجراء تدقيق شامل للكود، مع التركيز بشكل خاص على الأجزاء التي تتعلق بالعمليات ذات الأعداد الكبيرة.
تنفيذ تحقق صارم من الإدخال، لضمان أن المعلمات التي يقدمها المستخدم تقع ضمن النطاق المعقول.
النظر في إضافة آليات أمان مثل التوقيع المتعدد أو قفل الوقت في العمليات الرئيسية.
يبرز هذا الحدث مرة أخرى أهمية أمان العقود الذكية، ويذكر المطورين وأصحاب المشاريع بضرورة البقاء في حالة تأهب دائم، وتحسين أمان الكود باستمرار. في الوقت نفسه، يذكر المستخدمين بضرورة توخي الحذر الشديد عند التفاعل مع مشاريع التمويل اللامركزية، خاصة عند المشاركة في مشاريع جديدة أو مشاريع لم تخضع للتدقيق الكافي.
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تعرض مشروع Poolz لهجوم تجاوز حسابي وخسر 66.5 ألف دولار من أصول التشفير
تم استهداف مشروع Poolz بسبب ثغرة في تجاوز السعة العددية، مما أدى إلى خسارة حوالي 665,000 دولار أمريكي
مؤخراً، أثار هجوم على مشروع Poolz اهتماماً واسعاً في مجتمع العملات المشفرة. وفقاً لبيانات مراقبة السلسلة، حدث الهجوم في 15 مارس 2023، وشمل ثلاثة شبكات: Ethereum و BNB Chain و Polygon. استغل المهاجمون ثغرة في الفائض الحسابي في العقد الذكي، مما أدى إلى سرقة كمية كبيرة من الرموز، تقدر قيمتها الإجمالية بحوالي 665,000 دولار.
تفاصيل الهجوم
نفذ المهاجمون هذا الهجوم من خلال الخطوات التالية:
أولاً، قمت بتبادل كمية معينة من رموز MNZ في بورصة لامركزية.
بعد ذلك تم استدعاء دالة CreateMassPools في عقد Poolz. كان من المفترض أن تسمح هذه الدالة للمستخدمين بإنشاء مجموعة من أحواض السيولة وتوفير السيولة الأولية، ولكن هناك ثغرة خطيرة فيها.
المشكلة تظهر في دالة getArraySum. تُستخدم هذه الدالة لحساب كمية السيولة الأولية التي يقدمها المستخدم، لكنها فشلت في معالجة حالات تجاوز السعة الصحيحة بشكل صحيح.
قام المهاجم ببراعة ببناء معلمات الإدخال بحيث تحتوي مصفوفة _StartAmount على أرقام تتجاوز الحد الأقصى لـ uint256. وهذا أدى إلى تجاوز نتيجة الجمع ، مما جعل القيمة المرجعة النهائية تساوي 1.
نظرًا لأن العقد استخدم القيمة الأصلية لـ _StartAmount عند تسجيل خصائص المسبح، بدلاً من عدد الرموز المميز الفعلي الذي تم نقله، يمكن للمهاجم ببساطة نقل 1 رمز مميز لإنشاء مسبح سيولة أعلى بكثير من الواقع.
أخيرًا، استغل المهاجم وظيفة السحب لسحب كميات كبيرة من الرموز غير المصرح بها، مما أكمل عملية الهجوم بأكملها.
الأصول المسروقة
أدى هذا الهجوم إلى خسائر في عدة رموز، بما في ذلك على سبيل المثال لا الحصر:
لقد قام المهاجمون بتحويل جزء من الرموز المسروقة إلى BNB، ولكن حتى وقت التقرير، لم يتم نقل هذه الأموال من عنوان المهاجم.
نصائح للوقاية
لتجنب ثغرات تجاوز السعة الحسابية المماثلة، يوصي الخبراء باتخاذ التدابير التالية:
استخدم إصدارات أحدث من مترجم Solidity، حيث ستقوم هذه الإصدارات بإجراء فحوصات overflow تلقائيًا أثناء عملية الترجمة.
بالنسبة للمشاريع التي تستخدم إصدارات قديمة من Solidity، يُنصح بإدخال مكتبة SafeMath من OpenZeppelin للتعامل مع العمليات العددية، لتجنب مشاكل الفائض.
إجراء تدقيق شامل للكود، مع التركيز بشكل خاص على الأجزاء التي تتعلق بالعمليات ذات الأعداد الكبيرة.
تنفيذ تحقق صارم من الإدخال، لضمان أن المعلمات التي يقدمها المستخدم تقع ضمن النطاق المعقول.
النظر في إضافة آليات أمان مثل التوقيع المتعدد أو قفل الوقت في العمليات الرئيسية.
يبرز هذا الحدث مرة أخرى أهمية أمان العقود الذكية، ويذكر المطورين وأصحاب المشاريع بضرورة البقاء في حالة تأهب دائم، وتحسين أمان الكود باستمرار. في الوقت نفسه، يذكر المستخدمين بضرورة توخي الحذر الشديد عند التفاعل مع مشاريع التمويل اللامركزية، خاصة عند المشاركة في مشاريع جديدة أو مشاريع لم تخضع للتدقيق الكافي.