في 2 فبراير 2023 بعد الظهر، تعرض بروتوكول أوريون على شبكة إيثيريوم و بينانس لهجوم إعادة دخول بسبب ثغرة في العقد، مما تسبب في خسائر تقدر بنحو 2.9 مليون دولار، بما في ذلك 2,844,766 USDT على إيثيريوم و 191,606 BUSD على BSC.
تحليل عملية الهجوم
قام المهاجم أولاً بإنشاء عقد Token، وأجرى عمليات نقل وتفويض، استعداداً للهجوم اللاحق. بعد ذلك، قام المهاجم بالحصول على قرض من خلال طريقة swap الخاصة بـ UNI-V2، واستدعى طريقة swapThroughOrionPool لعقد ExchangeWithAtomic لتبادل الرموز. تم تعيين مسار التبادل إلى [USDC، Token الذي أنشأه المهاجم، USDT].
خلال عملية التبادل، بسبب وجود وظيفة الاستدعاء في عقد التوكن الذي أنشأه المهاجم، قام المهاجم من خلال Token.Transfer بمواصلة استدعاء طريقة ExchangeWithAtomic.depositAsset، مما أدى إلى هجوم إعادة الدخول. وهذا تسبب في تراكم مبلغ الإيداع باستمرار، وفي النهاية أكمل المهاجم الربح من خلال عملية السحب.
! [تحليل هجوم إعادة دخول OrionProtocol باستخدام PoC](https://img-cdn.gateio.im/webp-social/moments-730464b2d4d7f6e0ff21a0289a2d5d68.webp0192837465674839201
تدفق الأموال
تأتي الأموال الأولية للمهاجم من حساب المحفظة الساخنة على منصة تداول معينة. من بين 1651 ETH التي تم تحقيقها، لا يزال 657.5 في عنوان محفظة المهاجم، وقد تم تحويل الباقي من خلال خدمة خلط العملات.
! [تحليل هجوم إعادة دخول OrionProtocol مع PoC])https://img-cdn.gateio.im/webp-social/moments-caac189901b7aaad5abd8be30bb4361a.webp(
تحليل الثغرات
تظهر المشكلة الأساسية للثغرة في دالة doSwapThroughOrionPool. تقوم هذه الدالة بتحديث متغير curBalance بعد تنفيذ تحويل الرمز، مما يخلق فرصة للمهاجمين. أضاف المهاجمون وظيفة استدعاء في دالة transfer للرمز المزيّف، واستدعى دالة depositAsset، مما أدى إلى تحديث خاطئ لـ curBalance. في النهاية، بعد سداد القرض الفوري، قام المهاجمون بسحب الأموال الزائدة من خلال دالة withdraw.
! [تحليل هجوم إعادة دخول OrionProtocol مع PoC])https://img-cdn.gateio.im/webp-social/moments-7e21c34158a85d4c387fcdbec136d31b.webp(
! [تحليل هجوم إعادة دخول OrionProtocol باستخدام PoC])https://img-cdn.gateio.im/webp-social/moments-24819b5154419e86ea523a25a9101f67.webp(
! [تحليل هجوم إعادة دخول OrionProtocol مع PoC])https://img-cdn.gateio.im/webp-social/moments-7c4bde9d6a35da4304844a3bbb934fae.webp(
! [تحليل هجوم إعادة دخول OrionProtocol باستخدام PoC])https://img-cdn.gateio.im/webp-social/moments-7239f8886fe83c1da8b1b42545185811.webp(
تكرار الهجوم
قدم الباحثون جزءًا من رمز POC لمحاكاة عملية الهجوم. أظهرت نتائج الاختبار أن المهاجمين تمكنوا من استغلال ثغرات العقد للحصول على USDT إضافية.
! [تحليل هجوم إعادة الدخول OrionProtocol مع PoC])https://img-cdn.gateio.im/webp-social/moments-e5042932f0e1b7fa96e3f6e749231957.webp(
![تحليل هجمات إعادة الدخول بروتوكول أوريون مع PoC])https://img-cdn.gateio.im/webp-social/moments-4bd31735de09c63c490488e887118038.webp(
! [تحليل هجوم إعادة دخول OrionProtocol باستخدام PoC])https://img-cdn.gateio.im/webp-social/moments-cd401091e63ab21864f39cd650014b97.webp(
! [تحليل هجوم إعادة دخول OrionProtocol باستخدام PoC])https://img-cdn.gateio.im/webp-social/moments-e010d0f0c02fb8bbc648f755b0ac464c.webp(
! [تحليل هجوم إعادة الدخول OrionProtocol باستخدام PoC])https://img-cdn.gateio.im/webp-social/moments-f3c5f9416cfb9b7b791d86eeffb933be.webp(
نصائح الأمان
بالنسبة للمشاريع التي تحتوي على وظيفة تبادل الرموز، يجب مراعاة المخاطر الأمنية التي قد تنجم عن تعدد الرموز ومسارات التبادل. يُنصح باتباع معيار الترميز "تأكد أولاً، ثم قم بتخزين المتغير، ثم قم بالاستدعاء الخارجي" (نموذج الفحوصات-التأثيرات-التفاعلات) لتعزيز أمان واستقرار العقد. علاوة على ذلك، يجب على المشروع القضاء على مخاطر العقد خارج السلسلة قدر الإمكان، لضمان التشغيل الآمن للنظام البيئي Web3.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
تعرض OrionProtocol لهجوم إعادة دخول أدى إلى خسارة 2.9 مليون دولار، تحليل الثغرات الأمنية واقتراحات الوقاية.
تحليل أحداث الهجوم المتكرر على OrionProtocol
في 2 فبراير 2023 بعد الظهر، تعرض بروتوكول أوريون على شبكة إيثيريوم و بينانس لهجوم إعادة دخول بسبب ثغرة في العقد، مما تسبب في خسائر تقدر بنحو 2.9 مليون دولار، بما في ذلك 2,844,766 USDT على إيثيريوم و 191,606 BUSD على BSC.
تحليل عملية الهجوم
قام المهاجم أولاً بإنشاء عقد Token، وأجرى عمليات نقل وتفويض، استعداداً للهجوم اللاحق. بعد ذلك، قام المهاجم بالحصول على قرض من خلال طريقة swap الخاصة بـ UNI-V2، واستدعى طريقة swapThroughOrionPool لعقد ExchangeWithAtomic لتبادل الرموز. تم تعيين مسار التبادل إلى [USDC، Token الذي أنشأه المهاجم، USDT].
خلال عملية التبادل، بسبب وجود وظيفة الاستدعاء في عقد التوكن الذي أنشأه المهاجم، قام المهاجم من خلال Token.Transfer بمواصلة استدعاء طريقة ExchangeWithAtomic.depositAsset، مما أدى إلى هجوم إعادة الدخول. وهذا تسبب في تراكم مبلغ الإيداع باستمرار، وفي النهاية أكمل المهاجم الربح من خلال عملية السحب.
! [تحليل هجوم إعادة دخول OrionProtocol باستخدام PoC](https://img-cdn.gateio.im/webp-social/moments-730464b2d4d7f6e0ff21a0289a2d5d68.webp0192837465674839201
تدفق الأموال
تأتي الأموال الأولية للمهاجم من حساب المحفظة الساخنة على منصة تداول معينة. من بين 1651 ETH التي تم تحقيقها، لا يزال 657.5 في عنوان محفظة المهاجم، وقد تم تحويل الباقي من خلال خدمة خلط العملات.
! [تحليل هجوم إعادة دخول OrionProtocol مع PoC])https://img-cdn.gateio.im/webp-social/moments-caac189901b7aaad5abd8be30bb4361a.webp(
تحليل الثغرات
تظهر المشكلة الأساسية للثغرة في دالة doSwapThroughOrionPool. تقوم هذه الدالة بتحديث متغير curBalance بعد تنفيذ تحويل الرمز، مما يخلق فرصة للمهاجمين. أضاف المهاجمون وظيفة استدعاء في دالة transfer للرمز المزيّف، واستدعى دالة depositAsset، مما أدى إلى تحديث خاطئ لـ curBalance. في النهاية، بعد سداد القرض الفوري، قام المهاجمون بسحب الأموال الزائدة من خلال دالة withdraw.
! [تحليل هجوم إعادة دخول OrionProtocol مع PoC])https://img-cdn.gateio.im/webp-social/moments-7e21c34158a85d4c387fcdbec136d31b.webp(
! [تحليل هجوم إعادة دخول OrionProtocol باستخدام PoC])https://img-cdn.gateio.im/webp-social/moments-24819b5154419e86ea523a25a9101f67.webp(
! [تحليل هجوم إعادة دخول OrionProtocol مع PoC])https://img-cdn.gateio.im/webp-social/moments-7c4bde9d6a35da4304844a3bbb934fae.webp(
! [تحليل هجوم إعادة دخول OrionProtocol باستخدام PoC])https://img-cdn.gateio.im/webp-social/moments-7239f8886fe83c1da8b1b42545185811.webp(
تكرار الهجوم
قدم الباحثون جزءًا من رمز POC لمحاكاة عملية الهجوم. أظهرت نتائج الاختبار أن المهاجمين تمكنوا من استغلال ثغرات العقد للحصول على USDT إضافية.
! [تحليل هجوم إعادة الدخول OrionProtocol مع PoC])https://img-cdn.gateio.im/webp-social/moments-e5042932f0e1b7fa96e3f6e749231957.webp(
![تحليل هجمات إعادة الدخول بروتوكول أوريون مع PoC])https://img-cdn.gateio.im/webp-social/moments-4bd31735de09c63c490488e887118038.webp(
! [تحليل هجوم إعادة دخول OrionProtocol باستخدام PoC])https://img-cdn.gateio.im/webp-social/moments-cd401091e63ab21864f39cd650014b97.webp(
! [تحليل هجوم إعادة دخول OrionProtocol باستخدام PoC])https://img-cdn.gateio.im/webp-social/moments-e010d0f0c02fb8bbc648f755b0ac464c.webp(
! [تحليل هجوم إعادة الدخول OrionProtocol باستخدام PoC])https://img-cdn.gateio.im/webp-social/moments-f3c5f9416cfb9b7b791d86eeffb933be.webp(
نصائح الأمان
بالنسبة للمشاريع التي تحتوي على وظيفة تبادل الرموز، يجب مراعاة المخاطر الأمنية التي قد تنجم عن تعدد الرموز ومسارات التبادل. يُنصح باتباع معيار الترميز "تأكد أولاً، ثم قم بتخزين المتغير، ثم قم بالاستدعاء الخارجي" (نموذج الفحوصات-التأثيرات-التفاعلات) لتعزيز أمان واستقرار العقد. علاوة على ذلك، يجب على المشروع القضاء على مخاطر العقد خارج السلسلة قدر الإمكان، لضمان التشغيل الآمن للنظام البيئي Web3.