ثغرة خطيرة جديدة في لغة Move: تجاوز سعة العدد يمكن أن يؤدي إلى انهيار العقدة
مؤخراً، بعد تحليل عميق من قبل باحثي الأمن على لغة Move، تم اكتشاف ثغرة جديدة في تجاوز سعة الأعداد الصحيحة. تظهر هذه الثغرة خلال عملية التحقق من أمان الإشارات في لغة Move، وقد تؤدي إلى انهيار العقدة.
تقوم لغة Move بالتحقق من الشيفرة قبل تنفيذ التعليمات البرمجية، وتنقسم إلى أربع خطوات. الثغرة التي تم اكتشافها توجد في خطوة reference_safety. تهدف هذه الخطوة بشكل رئيسي إلى التحقق من أمان الإشارات، بما في ذلك التحقق مما إذا كانت هناك إشارات معلقة، وما إذا كانت الوصول إلى الإشارات القابلة للتغيير آمنة.
يتعلق تفعيل الثغرات بمفهوم الكتل الأساسية في لغة Move. الكتلة الأساسية هي تسلسل من التعليمات البرمجية التي لا تحتوي على تعليمات فرعية باستثناء المدخلات والمخرجات. تقوم Move بتحديد الكتل الأساسية من خلال استعراض الكود الثنائي والبحث عن التعليمات الفرعية.
خلال عملية التحقق من الأمان عند الاقتباس، يقوم النظام بمسح تعليمات بايت كود في كل كتلة أساسية، لتحديد ما إذا كانت جميع عمليات الاقتباس قانونية. تستخدم هذه العملية بنية AbstractState، التي تحتوي على مكونين مهمين هما borrow graph و locals.
تظهر الثغرة في دالة join_. عندما يتجاوز مجموع طول المعلمات وطول المتغيرات المحلية 256، قد يحدث تجاوز عددي بسبب استخدام نوع u8 لتمثيل الفهرس المحلي. على الرغم من أن Move لديه آلية للتحقق من عدد المتغيرات المحلية، إلا أنها لا تشمل طول المعلمات.
باستخدام ثغرة تجاوز السعة هذه، يمكن للمهاجم إنشاء كتلة كود حلقية، وتغيير حالة الكتلة. عند تنفيذ الكتلة الأساسية مرة أخرى، إذا كان المؤشر المطلوب الوصول إليه غير موجود في الخريطة المحلية الجديدة، فسوف يتسبب ذلك في تعطل البرنامج.
قدمت مجموعة الباحثين إثبات مفهوم (PoC)، والذي يوضح كيفية استغلال هذا الثغرة. من خلال ضبط معلمات معينة وعدد المتغيرات المحلية، يمكن تقليل طول خريطة locals إلى 8. في التنفيذ التالي، سيؤدي محاولة الوصول إلى الفهرس غير الموجود 57 إلى حدوث panic.
تثبت هذه الثغرة مرة أخرى أنه لا يوجد كود آمن بشكل مطلق. على الرغم من أن لغة Move قد خضعت لفحص ثابت قبل التنفيذ، إلا أنه لا يزال من الممكن تجاوزها من خلال تجاوز السعة العددية. يقترح الباحثون على مصممي لغة Move إضافة المزيد من شفرات الفحص أثناء التشغيل لمنع حدوث مشكلات مماثلة.
في الوقت الحالي، اكتشف فريق البحث ثغرة أخرى في لغة Move، وسيتم مشاركة المزيد من التفاصيل لاحقًا. هذه الاكتشافات لها أهمية كبيرة في تحسين أمان لغة Move.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 11
أعجبني
11
4
مشاركة
تعليق
0/400
PositionPhobia
· منذ 10 س
كم من الفخاخ في هذا الكود، إذا تمكنت من عبور واحدة، فهذا يعد إنجازاً.
ثغرة تجاوز السعة في لغة Move: الرجوع إلى التحقق من الأمان يحمل مخاطر
ثغرة خطيرة جديدة في لغة Move: تجاوز سعة العدد يمكن أن يؤدي إلى انهيار العقدة
مؤخراً، بعد تحليل عميق من قبل باحثي الأمن على لغة Move، تم اكتشاف ثغرة جديدة في تجاوز سعة الأعداد الصحيحة. تظهر هذه الثغرة خلال عملية التحقق من أمان الإشارات في لغة Move، وقد تؤدي إلى انهيار العقدة.
تقوم لغة Move بالتحقق من الشيفرة قبل تنفيذ التعليمات البرمجية، وتنقسم إلى أربع خطوات. الثغرة التي تم اكتشافها توجد في خطوة reference_safety. تهدف هذه الخطوة بشكل رئيسي إلى التحقق من أمان الإشارات، بما في ذلك التحقق مما إذا كانت هناك إشارات معلقة، وما إذا كانت الوصول إلى الإشارات القابلة للتغيير آمنة.
يتعلق تفعيل الثغرات بمفهوم الكتل الأساسية في لغة Move. الكتلة الأساسية هي تسلسل من التعليمات البرمجية التي لا تحتوي على تعليمات فرعية باستثناء المدخلات والمخرجات. تقوم Move بتحديد الكتل الأساسية من خلال استعراض الكود الثنائي والبحث عن التعليمات الفرعية.
خلال عملية التحقق من الأمان عند الاقتباس، يقوم النظام بمسح تعليمات بايت كود في كل كتلة أساسية، لتحديد ما إذا كانت جميع عمليات الاقتباس قانونية. تستخدم هذه العملية بنية AbstractState، التي تحتوي على مكونين مهمين هما borrow graph و locals.
تظهر الثغرة في دالة join_. عندما يتجاوز مجموع طول المعلمات وطول المتغيرات المحلية 256، قد يحدث تجاوز عددي بسبب استخدام نوع u8 لتمثيل الفهرس المحلي. على الرغم من أن Move لديه آلية للتحقق من عدد المتغيرات المحلية، إلا أنها لا تشمل طول المعلمات.
باستخدام ثغرة تجاوز السعة هذه، يمكن للمهاجم إنشاء كتلة كود حلقية، وتغيير حالة الكتلة. عند تنفيذ الكتلة الأساسية مرة أخرى، إذا كان المؤشر المطلوب الوصول إليه غير موجود في الخريطة المحلية الجديدة، فسوف يتسبب ذلك في تعطل البرنامج.
قدمت مجموعة الباحثين إثبات مفهوم (PoC)، والذي يوضح كيفية استغلال هذا الثغرة. من خلال ضبط معلمات معينة وعدد المتغيرات المحلية، يمكن تقليل طول خريطة locals إلى 8. في التنفيذ التالي، سيؤدي محاولة الوصول إلى الفهرس غير الموجود 57 إلى حدوث panic.
! اكتشفت Numen Cyber حصريا ثغرة أمنية أخرى عالية الخطورة في لغة الحركة
تثبت هذه الثغرة مرة أخرى أنه لا يوجد كود آمن بشكل مطلق. على الرغم من أن لغة Move قد خضعت لفحص ثابت قبل التنفيذ، إلا أنه لا يزال من الممكن تجاوزها من خلال تجاوز السعة العددية. يقترح الباحثون على مصممي لغة Move إضافة المزيد من شفرات الفحص أثناء التشغيل لمنع حدوث مشكلات مماثلة.
في الوقت الحالي، اكتشف فريق البحث ثغرة أخرى في لغة Move، وسيتم مشاركة المزيد من التفاصيل لاحقًا. هذه الاكتشافات لها أهمية كبيرة في تحسين أمان لغة Move.
! اكتشفت Numen Cyber حصريا ثغرة أمنية أخرى عالية الخطورة في لغة الحركة