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