نيوغو v0.120.0 يسد الثغرات ويعزز أداء الآلة الافتراضية

أصدر فريق Neo SPCC تحديثًا عاجلًا لإصدار NeoGo الإصدار v0.120.0 تحت اسم “Amortization” في 15 يونيو، والذي يعالج عدة ثغرات أمنية خطيرة، كما يقدم تحسينات في أداء الآلة الافتراضية (VM). هذا الإصدار متوافق تمامًا مع إصدار Neo-CLI v3.10.0 الذي تم نشره مؤخرًا على الشبكة الرئيسية (MainNet). لا حاجة لإعادة مزامنة سلسلة الكتل (blockchain) من أجل الترقية.
وصف فريق Neo SPCC هذا الإصدار بأنه عاجل، مؤكدًا أنه “يصلح مجموعة من الثغرات التي قد تؤثر على عملية تشغيل العقدة”.
تعزيز الأمان عبر RPC وOracle وVM
يعالج هذا الإصدار خمسة تصحيحات للثغرات الأمنية تغطي عدة مكونات من بنية العقدة. تم نقل معظم هذه التصحيحات من إصلاحات تم تطبيقها بالفعل على العقدة المرجعية بلغة C#، مما يعكس التعاون المستمر في مجال الأمان بين العملاء المختلفين داخل نظام Neo البيئي.
تغطي التصحيحات ما يلي:
- تقوية تحميل بيانات RPC: يفرض حدودًا أكثر صرامة على إلغاء تسلسل (deserialization) الكتل والمعاملات لمنع إساءة الاستخدام عبر الأحمال كبيرة الحجم.
- توسيع تصفية عنوان IP لخدمة Oracle: لحظر نطاقات عناوين خاصة إضافية، مما يسد ثغرة محتملة لهجمات من نوع SSRF ضد البنية التحتية للشبكة الداخلية.
- فرض حدود لطول البرنامج النصي (script) عند إلغاء تسلسل الشهود (Witness) لكائنات SignerWithWitness المقدمة عبر واجهة RPC API.
- وضع حد أقصى لعمق إلغاء تسلسل عُقد شجرة Merkle Patricia Trie لمنع التكرار المفرط الناتج عن الهياكل الضارة.
- تصحيح عداد استهلاك الغاز (gasConsumed) الخاص بالآلة الافتراضية لمنع حدوث تجاوز (overflow)، والذي كان يمكن أن يتسبب سابقًا في سلوك تنفيذ غير صحيح.
تحسينات أداء الآلة الافتراضية (VM)
ساهم المطور المجتمعي @Turalchik بتحسينين في أداء الآلة الافتراضية. الأول: إلغاء النسخ العميق الزائد عن الحاجة في تعليمة DUP عند التعامل مع أنواع البيانات الأولية مثل الأعداد الصحيحة والقيم المنطقية وسلاسل البايت. نظرًا لأن هذه الأنواع غير قابلة للتغيير ويتم تمريرها بالقيمة، فإن نسخها غير ضروري. الثاني: تطبيق نفس المنطق على تعليمات NEWARRAYT وNEWSTRUCT، مما يلغي نسخ العناصر عند إنشاء مصفوفات من الأنواع غير القابلة للتغيير.
تتوافق كلا التغييرين مع سلوك الآلة الافتراضية المرجعية بلغة C#، ومن المتوقع أن تحسن سرعة التنفيذ للبرامج النصية التي تستخدم هذه التعليمات بكثافة.
إصلاحات التوافق مع عقدة C#
يحل إصدار NeoGo v0.120.0 العديد من التناقضات السلوكية مع العقدة المرجعية بلغة C#. والأبرز هو تصحيح تناقض حدث على شبكة TestNet عند الكتلة رقم 3,164,129، حيث تسببت معاملة تسجيل مرشح (candidate registration) في توقف (HALT) على عقدة C# بينما تسببت في خطأ (FAULT) على NeoGo. كانت المشكلة ناتجة عن الإزالة المبكرة لأكواد التوافق الخاصة بعصر Echidna من معالجة registerCandidate.
تشمل الإصلاحات الإضافية ما يلي: منع سمات Conflicts المكررة بشكل صحيح داخل المعاملات، محاكاة سلوك المعاملات في استدعاءات RPC الخاصة بـ invokefunction وinvokescript لتطابق مخرجات C#، تصحيح ترتيب البايت الخاطئ (endianness) في الأمر CLI util canceltx، إصلاح نوع إرجاع خاطئ في الغلاف التفاعلي storage.LocalGet، وإصلاح مشكلة سباق (race condition) في إيقاف تشغيل WebSocket في خادم RPC.
إجراء مطلوب من مشغلي العقد
كجزء من تقوية تحميل بيانات RPC، تم تقليل القيمة الافتراضية لـ MaxRequestBodyBytes. يجب على مشغلي العقد الذين اعتمدوا سابقًا على القيمة الافتراضية الأعلى ويحتاجون إلى أحجام طلبات أكبر، تحديث تكوين العقدة يدويًا لتعيين قيمة مخصصة.
تحسينات إضافية
يقدم الإصدار أيضًا خطأ مميزًا جديدًا هو ErrTxNotYetValid للمعاملات التي تقع خارج نافذتها الزمنية الصالحة، مما يحسن من تشخيص المطورين الذين لم يتمكنوا سابقًا من التمييز بين هذه المعاملات والمعاملات منتهية الصلاحية. تم تحديث الوثائق عبر 18 ملفًا لتتوافق مع تنسيق تعليقات Go 1.19 المنظمة، وتم إصلاح العديد من اختبارات الوحدة غير المستقرة لتحسين موثوقية التكامل المستمر (CI).
ملاحظة: تم حذف رابط الإصدار الكامل حسب الطلب.
الأسئلة الشائعة (FAQ)
ما هو التحديث الجديد في إصدار NeoGo v0.120.0 ولماذا هو عاجل؟
هذا تحديث أمني عاجل من Neo SPCC. يقوم بإصلاح خمس ثغرات أمنية خطيرة تؤثر على تشغيل العقدة، مع تحسين أداء الآلة الافتراضية (VM). التحديث متوافق مع الإصدار Neo-CLI v3.10.0 ولا يتطلب إعادة مزامنة لسلسلة الكتل.
ما هي التحسينات الرئيسية في أداء الآلة الافتراضية (VM)؟
تم إضافة تحسينين من مطور مجتمعي. الأول يمنع النسخ غير الضروري للبيانات عند استخدام تعليمة DUP. الثاني يمنع نسخ العناصر عند إنشاء مصفوفات من أنواع البيانات غير القابلة للتغيير (مثل الأعداد الصحيحة). هذا يجعل تنفيذ البرامج النصية أسرع.
هل هناك أي إجراء مطلوب مني كمشغل عقدة؟
نعم، بسبب تحسينات الأمان، تم تقليل الحد الافتراضي لحجم بيانات الطلب (MaxRequestBodyBytes). إذا كانت عقدتك تحتاج إلى استقبال طلبات أكبر، فيجب عليك تحديث ملف التكوين يدويًا لتعيين قيمة أكبر تناسب احتياجاتك.












