ثغرة أمنية حرجة في Wasmtime ووقت تشغيل تطبيقات WebAssembly

تعمل التحديثات التصحيحية Wasmtime 6.0.1 و 5.0.1 و 4.0.1 على إصلاح الثغرة الأمنية (CVE-2023-26489) ، والتي تم تصنيفها على أنها حرجة. تسمح الثغرة الأمنية بتنظيم كتابة البيانات في منطقة ذاكرة خارج الحدود المسموح بها لرمز WebAssembly المعزول ، والذي يمكن أن يستخدمه المهاجم لتنظيم تنفيذ التعليمات البرمجية الخاصة به خارج بيئة WASI المعزولة.

Wasmtime هو وقت تشغيل لتشغيل تطبيقات WebAssembly مع امتدادات WASI (واجهة نظام WebAssembly) كتطبيقات مستقلة عادية. تمت كتابة مجموعة الأدوات بلغة Rust ، وتنتج الثغرة الأمنية عن خطأ منطقي في تعريف قواعد معالجة الذاكرة الخطية في منشئ كود Cranelift ، والذي يترجم التمثيل الوسيط المستقل عن بنى الأجهزة إلى رمز آلة قابل للتنفيذ لهندسة x86_64.

على وجه الخصوص ، تم حساب العناوين الفعالة ذات 35 بت لتطبيقات WebAssembly بدلاً من عناوين 33 بت المسموح بها في WebAssembly ، والتي حولت حد الذاكرة الظاهرية المسموح بها لعمليات القراءة والكتابة إلى 34 جيجابايت ، بينما توفر إعدادات بيئة وضع الحماية الحماية لـ 6 جيجابايت من عنوان القاعدة. ونتيجة لذلك ، كان نطاق الذاكرة الافتراضية من 6 إلى 34 جيجا بايت من العنوان الأساسي متاحًا للقراءة والكتابة من تطبيقات WebAssembly. يمكن لهذه الذاكرة أن تستضيف بيئات WebAssembly الأخرى أو مكونات وقت تشغيل WebAssembly.

إذا لم يكن من الممكن تحديث إصدار Wasmtime ، فإن تحديد الخيار "Config :: static_memory_maximum_size (0)" لتمكين التحقق من الحدود الإلزامية المنفصلة على أي وصول للذاكرة الخطية مذكور كحلول لمنع الخطأ (ينتج عنه تدهور كبير في الأداء). خيار آخر هو استخدام الإعداد "Config :: static_memory_guard_size (1 <36)" لزيادة عدد صفحات الحراسة (Guard Page ، يتم طرح استثناء عند الوصول إليها) الموجودة في نطاق الذاكرة الظاهرية المشكل (يؤدي إلى حجز كمية كبيرة من الذاكرة الظاهرية والحد من عدد تطبيقات WebAssembly المتزامنة).

المصدر: opennet.ru

إضافة تعليق