تحليل ثغرة تجاوز سعة الأعداد الصحيحة في وحدة الأمان بلغة Move
ستقوم هذه المقالة بتحليل عميق لثغرة تجاوز السعة العددية المكتشفة حديثًا في لغة Move. توجد هذه الثغرة في وحدة التحقق من الأمان المرجعي، وقد تؤدي إلى تعطل العقد. من خلال شرح هذه المقالة، سيكتسب القارئ فهمًا أعمق للغة Move.
خلفية الثغرات
تقوم لغة Move بالتحقق من الكود قبل تنفيذ بايت كود، وتنقسم إلى 4 خطوات. تظهر هذه الثغرة في خطوة التحقق من الأمان (reference_safety).
العملية الرئيسية للتحقق من الأمان هي:
التعرف على الكتل الأساسية من الشفرات
تحليل كل كتلة أساسية
حالة ما قبل الدمج وما بعده
نقل الحالة إلى الكتل اللاحقة
المفتاح هنا هو الحفاظ على هيكل AbstractState، الذي يحتوي على locals وborrow graph لضمان أمان الإشارات.
تفاصيل الثغرة
توجد ثغرة في دالة join_. عندما يكون طول معلمات الدالة بالإضافة إلى طول المتغيرات المحلية أكبر من 256، يحدث تجاوز عددي بسبب استخدام نوع u8 للتكرار.
بشكل محدد:
iter_locals() يعيد مُكرِر من نوع u8
يحدث تجاوز عندما يكون طول المعامل + طول المتغير المحلي > 256
قام المطورون بفحص عدد المتغيرات المحلية فقط، متجاهلين طول المعلمات
استغلال الثغرات
يمكن بناء كتلة أساسية حلقية، باستخدام الفائض لتغيير الحالة:
تعيين طول المعلمات والمتغيرات المحلية أكبر من 256
بعد التنفيذ الأول، تقلل طول locals الجديدة من تجاوز السعة
عند التنفيذ مرة أخرى، يؤدي الوصول إلى فهرس locals غير الموجود إلى حدوث panic
عرض PoC
يوفر كود PoC قابل للتكرار، يتضمن كتلة أساسية في حلقة لانهائية. من خلال تعيين المعلمات المناسبة وطول المتغيرات المحلية، يمكن أن يؤدي إلى DoS.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 21
أعجبني
21
8
مشاركة
تعليق
0/400
WhaleMinion
· 07-26 05:03
هجمات تجاوز سعة u8 قد جاءت
شاهد النسخة الأصليةرد0
MevTears
· 07-24 04:19
من كتب هذا الكود؟ يجب التحقق منه عشر مرات.
شاهد النسخة الأصليةرد0
GasFeeCryer
· 07-23 13:34
الثغرات يمكن اللعب بها وهناك هجوم حرمان الخدمة، رائحة رائعة!
شاهد النسخة الأصليةرد0
TopEscapeArtist
· 07-23 05:47
ارتكاب الأخطاء هو الروتين اليومي لسوق الدببة، ويجب أن تكون أكثر حذراً عند نقل الطوب.
شاهد النسخة الأصليةرد0
TokenomicsTherapist
· 07-23 05:45
هذه المشكلة مخيفة حقًا
شاهد النسخة الأصليةرد0
TxFailed
· 07-23 05:43
هههه، تجاوز عدد صحيح كلاسيكي... تعلمت عن هذه الطريقة المكلفة بصراحة
شاهد النسخة الأصليةرد0
SchrödingersNode
· 07-23 05:40
أشعر بالقلق، لماذا توجد كل هذه المشاكل؟
شاهد النسخة الأصليةرد0
AltcoinMarathoner
· 07-23 05:40
التمسك خلال عاصفة تجاوز العدد الصحيح... مجرد علامة ميل أخرى في الويب 3 الفائق
تحليل عميق لثغرة تجاوز عدد صحيح في وحدة الأمان الخاصة بلغة Move
تحليل ثغرة تجاوز سعة الأعداد الصحيحة في وحدة الأمان بلغة Move
ستقوم هذه المقالة بتحليل عميق لثغرة تجاوز السعة العددية المكتشفة حديثًا في لغة Move. توجد هذه الثغرة في وحدة التحقق من الأمان المرجعي، وقد تؤدي إلى تعطل العقد. من خلال شرح هذه المقالة، سيكتسب القارئ فهمًا أعمق للغة Move.
خلفية الثغرات
تقوم لغة Move بالتحقق من الكود قبل تنفيذ بايت كود، وتنقسم إلى 4 خطوات. تظهر هذه الثغرة في خطوة التحقق من الأمان (reference_safety).
العملية الرئيسية للتحقق من الأمان هي:
المفتاح هنا هو الحفاظ على هيكل AbstractState، الذي يحتوي على locals وborrow graph لضمان أمان الإشارات.
تفاصيل الثغرة
توجد ثغرة في دالة join_. عندما يكون طول معلمات الدالة بالإضافة إلى طول المتغيرات المحلية أكبر من 256، يحدث تجاوز عددي بسبب استخدام نوع u8 للتكرار.
بشكل محدد:
استغلال الثغرات
يمكن بناء كتلة أساسية حلقية، باستخدام الفائض لتغيير الحالة:
عرض PoC
يوفر كود PoC قابل للتكرار، يتضمن كتلة أساسية في حلقة لانهائية. من خلال تعيين المعلمات المناسبة وطول المتغيرات المحلية، يمكن أن يؤدي إلى DoS.
! اكتشفت Numen Cyber حصريا ثغرة أمنية أخرى عالية الخطورة في لغة الحركة
! اكتشفت Numen Cyber حصريا ثغرة أمنية أخرى عالية الخطورة في لغة الحركة
الاستنتاج
تظهر هذه الثغرة مرة أخرى أن:
بصفتنا رواد البحث في أمان لغة Move، سنواصل الغوص في القضايا الأمنية ذات الصلة ومشاركة نتائج أبحاثنا مع المجتمع.