وفقا للتحذير الأمني لنظام Slow MistEye ، في 7 أكتوبر 2023 ، تعرضت Stars Arena ، البروتوكول الاجتماعي Avalanche on-chain ، للهجوم ، مما أدى إلى خسارة حوالي 2.9 مليون دولار. قام فريق أمان Slow Mist بتحليل الهجوم لفترة وجيزة وشارك النتائج أدناه.
معلومات ذات صلة
عنوان المهاجم:
عقد الهجوم:
تجارة الهجوم:
قلب الهجوم
يستغل المهاجم ثغرة إعادة الدخول للعبث بالسعر المقابل لسهم الإيداع الخاص به. بعد ذلك ، عند البيع ، يحدث تلاعب مماثل في الأسعار بسبب الاعتماد على التلاعب الضار بحسابات الأسعار. من خلال حساب سعر السهم المحدث بدقة عند إعادة الدخول ، يسرق المهاجم الأموال الموجودة في العقد.
تحليل المعاملات
يمكننا أن نجد أن هناك مكالمة إعادة دخول في معاملة الهجوم ، ونقوم بتحليل طريقة الاستدعاء خطوة بخطوة عن طريق فك الكود.
! [إعادة الدخول مرة أخرى؟] تحليل الهجوم على ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-98a298d9bb-dd1a6f-69ad2a.webp)
يقوم المهاجم أولا بإنشاء عقد هجوم (0x7f283 و 0xdd9af) ، ويستدعي الطريقة 0xe9ccf3a3 ل Stars Arena: عقد الأسهم من خلال عقد الهجوم ، ثم يقوم بإيداع 1 رمز AVAX.
! [إعادة الدخول مرة أخرى؟] تحليل هجوم ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-fccaa140dd-dd1a6f-69ad2a.webp)
وفقا للتتبع التدريجي للكود الذي تم فك تجميعه ، فإن الطريقة 0xe9ccf3a3 المستخدمة أولا من قبل المهاجم هي وظيفة تشبه الإيداع تستدعي طرق 0x326c و 0x2058. طريقة 0x326c هي مكالمة يتم إرجاعها فقط كمعلمة ، بينما تشبه طريقة 0x2058 وظيفة تتعامل مع شراء أو تبادل نوع من الرموز المميزة ، وتستخدم الطريقة مبلغ وعنوان رموز AVAX التي تم تمريرها بواسطة 0xe9ccf3a3 لحساب العملية التالية وحساب الأسهم والرسوم.
! [إعادة الدخول مرة أخرى؟] تحليل هجوم ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-9279aef172-dd1a6f-69ad2a.webp)
باتباع منطق الاستدعاء للسطر 92 من طريقة 0x2058 ، يمكن العثور على أن طريقة 0x1a9b هي دالة حسابية ، والنتيجة المحسوبة هي قيمة مشابهة للسعر ، وقيمة إرجاعها هي v24 / 0xde0b6b3a7640000 المحسوبة حديثا أو _initialPrice.
تحتوي الأسطر 109 و 110 و 116 التالية من 0x307c و 0x30ef على استدعاء إلى مكالمة منخفضة المستوى ، ولا تزال مكالمة 0x30ef مكالمة خارجية إلى g1 ، أي عنوان عقد هجوم 0xdd9af الوارد. لا تحتوي الدالة على قيد قفل الوافد ، وبعد تنفيذ الاستدعاء الخارجي ، ستنفذ هذه الطريقة فقط الحكم اللاحق إذا لتحديث معلمات field0.length و field0. ليس هناك شك في أن إعادة الدخول تحدث هنا.
! [إعادة الدخول مرة أخرى؟] تحليل هجوم ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-3c9611d0bb-dd1a6f-69ad2a.webp)
لنلق نظرة على البيانات التي ينشئها المهاجم في مكالمة إعادة الدخول.
! [إعادة الدخول مرة أخرى؟] تحليل الهجوم على ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-ce911c42e9-dd1a6f-69ad2a.webp)
يستدعي الإدخال الخارجي طريقة 0x5632b2e4 ويمر في أربع معلمات أنشأها المهاجم ، والتي تحول 153005ce00 إلى 9100000000000 برقم عشري.
كما ذكر أعلاه ، يتم تنفيذ الاستدعاء الخارجي إلى طريقة 0x5632b2e4 قبل الحكم if (g0 == \ _getMyShares [address (g1)] [msg.sender]). في هذا الوقت، قيمة الحقل0.lengt هي 0 ولا يتم تحديثها. بهذه الطريقة ، يتجاوز المهاجم الحكم في طريقة 0x5632b2e4 ويعدل حالة المعلمات الأربعة التالية من msg.sender ، أي 0xdd9af عقد الهجوم ، ليتم إنشاؤه عند إجراء المكالمة الخارجية.
! [إعادة الدخول مرة أخرى؟] تحليل هجوم ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-53695512db-dd1a6f-69ad2a.webp)
بعد القيام بذلك ، اتصل المهاجم ب sellShares لبيع حصته ، وحصل على 266,102.97278 AVAX.
! [إعادة الدخول مرة أخرى؟] تحليل الهجوم على ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-54e5a2f231-dd1a6f-69ad2a.webp)
بالتعمق في وظيفة sellShares ، تستدعي الوظيفة في البداية طريقة 0x1a9b ، والتي كانت تسمى في طريقة 0x2058 السابقة ، وهي وظيفة تتعامل مع شراء أو تبادل نوع من الرموز المميزة. يمكننا أن نرى أن الطريقة 0x2329 في الطريقة 0x1a9b بتحديث المالك _9f[g0] ، وتم تعديل هذه المعلمة إلى 9100000000000 التي أنشأها المهاجم عند الدخول.
! [إعادة الدخول مرة أخرى؟] تحليل هجوم ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-60823d09ab-dd1a6f-69ad2a.webp)
بالعودة إلى طريقة 0x1a9b ، أعد الحساب بناء على القيمة التي تم إنشاؤها مسبقا بشكل ضار (انظر الملاحظة لمعرفة المبلغ المحسوب).
! [إعادة الدخول مرة أخرى؟] تحليل الهجوم على ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-764b869b64-dd1a6f-69ad2a.webp)
بعد الحساب أعلاه ، تغير السعر المقابل للسهم المحسوب حديثا ، والنتيجة هي 274,333.061476814e18. بعد فرض سلسلة من الرسوم ، يستخدم المهاجم تركيبات ضارة للتلاعب بالسعر دون تعديل السهم وبيع السهم وتحقيق ربح بنجاح.
ملخص
في قلب هذا الهجوم يوجد تحديث تبعية حساب السعر الناجم عن هجوم إعادة الدخول ، مما يؤدي إلى تلاعب مماثل في الأسعار الخبيثة. يقترح فريق أمان Slow Mist أن يحاول فريق المشروع التدقيق من قبل شركات أمان متعددة قبل نشر العقد. في الوقت نفسه ، عند الترميز ، يجب أن يفي بمواصفات ترميز Checks-Effects-Interaction قدر الإمكان ، ويضيف قفلا مضادا لإعادة الدخول.
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
إعادة إدخال الثغرة الأمنية مرة أخرى؟ تحليل الهجوم على ستارز أرينا
خلفية
وفقا للتحذير الأمني لنظام Slow MistEye ، في 7 أكتوبر 2023 ، تعرضت Stars Arena ، البروتوكول الاجتماعي Avalanche on-chain ، للهجوم ، مما أدى إلى خسارة حوالي 2.9 مليون دولار. قام فريق أمان Slow Mist بتحليل الهجوم لفترة وجيزة وشارك النتائج أدناه.
معلومات ذات صلة
عنوان المهاجم:
عقد الهجوم:
تجارة الهجوم:
قلب الهجوم
يستغل المهاجم ثغرة إعادة الدخول للعبث بالسعر المقابل لسهم الإيداع الخاص به. بعد ذلك ، عند البيع ، يحدث تلاعب مماثل في الأسعار بسبب الاعتماد على التلاعب الضار بحسابات الأسعار. من خلال حساب سعر السهم المحدث بدقة عند إعادة الدخول ، يسرق المهاجم الأموال الموجودة في العقد.
تحليل المعاملات
يمكننا أن نجد أن هناك مكالمة إعادة دخول في معاملة الهجوم ، ونقوم بتحليل طريقة الاستدعاء خطوة بخطوة عن طريق فك الكود.
! [إعادة الدخول مرة أخرى؟] تحليل الهجوم على ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-98a298d9bb-dd1a6f-69ad2a.webp)
يقوم المهاجم أولا بإنشاء عقد هجوم (0x7f283 و 0xdd9af) ، ويستدعي الطريقة 0xe9ccf3a3 ل Stars Arena: عقد الأسهم من خلال عقد الهجوم ، ثم يقوم بإيداع 1 رمز AVAX.
! [إعادة الدخول مرة أخرى؟] تحليل هجوم ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-fccaa140dd-dd1a6f-69ad2a.webp)
وفقا للتتبع التدريجي للكود الذي تم فك تجميعه ، فإن الطريقة 0xe9ccf3a3 المستخدمة أولا من قبل المهاجم هي وظيفة تشبه الإيداع تستدعي طرق 0x326c و 0x2058. طريقة 0x326c هي مكالمة يتم إرجاعها فقط كمعلمة ، بينما تشبه طريقة 0x2058 وظيفة تتعامل مع شراء أو تبادل نوع من الرموز المميزة ، وتستخدم الطريقة مبلغ وعنوان رموز AVAX التي تم تمريرها بواسطة 0xe9ccf3a3 لحساب العملية التالية وحساب الأسهم والرسوم.
! [إعادة الدخول مرة أخرى؟] تحليل هجوم ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-9279aef172-dd1a6f-69ad2a.webp)
باتباع منطق الاستدعاء للسطر 92 من طريقة 0x2058 ، يمكن العثور على أن طريقة 0x1a9b هي دالة حسابية ، والنتيجة المحسوبة هي قيمة مشابهة للسعر ، وقيمة إرجاعها هي v24 / 0xde0b6b3a7640000 المحسوبة حديثا أو _initialPrice.
تحتوي الأسطر 109 و 110 و 116 التالية من 0x307c و 0x30ef على استدعاء إلى مكالمة منخفضة المستوى ، ولا تزال مكالمة 0x30ef مكالمة خارجية إلى g1 ، أي عنوان عقد هجوم 0xdd9af الوارد. لا تحتوي الدالة على قيد قفل الوافد ، وبعد تنفيذ الاستدعاء الخارجي ، ستنفذ هذه الطريقة فقط الحكم اللاحق إذا لتحديث معلمات field0.length و field0. ليس هناك شك في أن إعادة الدخول تحدث هنا.
! [إعادة الدخول مرة أخرى؟] تحليل هجوم ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-3c9611d0bb-dd1a6f-69ad2a.webp)
لنلق نظرة على البيانات التي ينشئها المهاجم في مكالمة إعادة الدخول.
! [إعادة الدخول مرة أخرى؟] تحليل الهجوم على ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-ce911c42e9-dd1a6f-69ad2a.webp)
يستدعي الإدخال الخارجي طريقة 0x5632b2e4 ويمر في أربع معلمات أنشأها المهاجم ، والتي تحول 153005ce00 إلى 9100000000000 برقم عشري.
كما ذكر أعلاه ، يتم تنفيذ الاستدعاء الخارجي إلى طريقة 0x5632b2e4 قبل الحكم if (g0 == \ _getMyShares [address (g1)] [msg.sender]). في هذا الوقت، قيمة الحقل0.lengt هي 0 ولا يتم تحديثها. بهذه الطريقة ، يتجاوز المهاجم الحكم في طريقة 0x5632b2e4 ويعدل حالة المعلمات الأربعة التالية من msg.sender ، أي 0xdd9af عقد الهجوم ، ليتم إنشاؤه عند إجراء المكالمة الخارجية.
! [إعادة الدخول مرة أخرى؟] تحليل هجوم ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-53695512db-dd1a6f-69ad2a.webp)
بعد القيام بذلك ، اتصل المهاجم ب sellShares لبيع حصته ، وحصل على 266,102.97278 AVAX.
! [إعادة الدخول مرة أخرى؟] تحليل الهجوم على ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-54e5a2f231-dd1a6f-69ad2a.webp)
بالتعمق في وظيفة sellShares ، تستدعي الوظيفة في البداية طريقة 0x1a9b ، والتي كانت تسمى في طريقة 0x2058 السابقة ، وهي وظيفة تتعامل مع شراء أو تبادل نوع من الرموز المميزة. يمكننا أن نرى أن الطريقة 0x2329 في الطريقة 0x1a9b بتحديث المالك _9f[g0] ، وتم تعديل هذه المعلمة إلى 9100000000000 التي أنشأها المهاجم عند الدخول.
! [إعادة الدخول مرة أخرى؟] تحليل هجوم ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-60823d09ab-dd1a6f-69ad2a.webp)
بالعودة إلى طريقة 0x1a9b ، أعد الحساب بناء على القيمة التي تم إنشاؤها مسبقا بشكل ضار (انظر الملاحظة لمعرفة المبلغ المحسوب).
! [إعادة الدخول مرة أخرى؟] تحليل الهجوم على ستارز أرينا] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-764b869b64-dd1a6f-69ad2a.webp)
بعد الحساب أعلاه ، تغير السعر المقابل للسهم المحسوب حديثا ، والنتيجة هي 274,333.061476814e18. بعد فرض سلسلة من الرسوم ، يستخدم المهاجم تركيبات ضارة للتلاعب بالسعر دون تعديل السهم وبيع السهم وتحقيق ربح بنجاح.
ملخص
في قلب هذا الهجوم يوجد تحديث تبعية حساب السعر الناجم عن هجوم إعادة الدخول ، مما يؤدي إلى تلاعب مماثل في الأسعار الخبيثة. يقترح فريق أمان Slow Mist أن يحاول فريق المشروع التدقيق من قبل شركات أمان متعددة قبل نشر العقد. في الوقت نفسه ، عند الترميز ، يجب أن يفي بمواصفات ترميز Checks-Effects-Interaction قدر الإمكان ، ويضيف قفلا مضادا لإعادة الدخول.