يؤدي هذا التحرير المزدوج للمراجع إلى خطأ تقني خطير يُعرف بـ "الاستخدام بعد التحرير" (UAF): حيث ينتهي المطاف بمسارين من التنفيذ بالعمل على ذاكرة تم تحريرها مسبقاً، مما يمنح المهاجم نافذة للتلاعب بكومة الذاكرة (heap) وفي النهاية اختطاف تدفق التحكم على مستوى نواة النظام المضيف .
الخلل يقع تحديداً في الدالة vgic_its_invalidate_cache()، التي تتجول في ذاكرة الترجمة المؤقتة باستخدام xa_for_each() وتستدعي vgic_put_irq() على المؤشر الذي يتم تكراره، بدلاً من القيمة التي يتم إرجاعها بأمان من xa_erase(). يمكن لسياقات تنفيذ متعددة الدخول إلى هذه الدالة تحت أقفال مختلفة، مما يجعل حالة التسابق قابلة للتحقيق بالكامل من داخل الضيف، عن طريق مزج التعامل مع أوامر ITS، والكتابة على السجل GITS_CTLR، ومسح البت EnableLPIs في وحدة إعادة التوزيع (redistributor)
.
رغم ندرة ثغرات الهروب من الضيف إلى المضيف، إلا أنها تبقى الأخطر في عالم مراقبات الأجهزة الافتراضية (hypervisors) لأنها تحطم حاجز العزل الذي تعتمد عليه الحوسبة السحابية. الاختراقات العامة السابقة لأنظمة KVM كانت تستهدف معمارية x86، وعادةً ما كانت عبر أخطاء في برمجيات مثل QEMU أو في كود خاص بمعالجات AMD . أما ITScape فهي أول ثغرة مثبتة تظهر اختراقاً من آلة ضيف غير مميزة على arm64 عبر كود KVM داخل النواة نفسه — دون الحاجة لأي أخطاء في برمجيات المحاكاة في فضاء المستخدم
.
بالنسبة لمزودي الخدمات السحابية الذين يشغلون أنظمة Graviton أو Ampere Altra أو أي مضيف KVM/arm64 بأحمال عمل متعددة المستأجرين، يمكن للضيف الخبيث:
الكود الضعيف يقع في مسار إبطال ذاكرة الترجمة المؤقتة لمقاطعات LPI. عندما تحتاج النواة لمسح مدخلات الذاكرة المؤقتة، فإنها تتجول في مصفوفة XArray باستخدام xa_for_each() وتستدعي vgic_put_irq() لتحرير عداد المراجع لكل مدخل. المشكلة أن xa_for_each() يمكن أن يعيد مدخلات ربما تم مسحها بالفعل بعملية متزامنة — مثل أمر DISCARD ITS
.
ثغرة سابقة في نفس الكود، CVE-2024-26598، عالجت جزئياً مشكلة UAF في مسار الوصول لذاكرة الترجمة المؤقتة عن طريق رفع عداد المراجع داخل vgic_its_check_cache() قبل تحرير القفل. لكن هذا الإصلاح لم يغطِ مسار الإبطال، تاركاً حالة التسابق قابلة للاستغلال عبر تسلسل تشغيل مختلف
.
قام الإصلاح المقدم من مطوري النواة بتعديل دالة vgic_its_invalidate_cache() بحيث يتم استدعاء vgic_put_irq() فقط على القيمة التي تعيدها الدالة xa_erase()، وليس على كل مدخل يلمسه المكرر. رسالة الإيداع (commit) تصف ذلك بوضوح: "KVM: arm64: vgic-its: إسقاط مرجع ذاكرة الترجمة المؤقتة فقط للمدخل الذي تم محوه"
.
ولأن xa_erase() تقوم بإزالة وإرجاع المدخل القديم بشكل ذري — أو تعيد NULL إذا كان المدخل قد اختفى بالفعل — فإن هذا الإصلاح يضمن إنقاص عداد المراجع مرة واحدة بالضبط، مما يلغي نافذة التحرير المزدوج. تم دمج الإصلاح في النواة الأساسية في أوائل يونيو 2026، وسُحب بسرعة إلى سلسلة النواة المستقرة 6.x حوالي 8-10 يونيو 2026
. وقد أصدرت توزيعات رئيسية مثل Red Hat و SUSE و Debian تحديثاتهم التي تتضمن هذا الإصلاح لفروع الأنوية المدعومة لديها
.
قام الباحث هيونوو كيم بنشر كود استغلال عملي للعامة على GitHub في حوالي 9-10 يونيو 2026. يتضمن المستودع الكود المصدري الكامل، وتعليمات إعادة إنتاج الخطوة بخطوة، ووصفاً تقنياً لتقنية الاستغلال . يثير الكود حالة التسابق بتنسيق خيوط معالجة افتراضية تصدر أوامر
DISCARD وعمليات بحث في ذاكرة الترجمة المؤقتة في آن واحد، ليصيب بدقة نافذة "الاستخدام بعد التحرير" لتنفيذ الأكواد على المضيف.
التوفر العلني لكود استغلال موثوق يعني أن أدوات فحص الثغرات التجارية والمهاجمين الحقيقيين يمكنهم تحويل الثغرة إلى سلاح بجهد ضئيل، مما يقصر الفترة بين الكشف عن الثغرة وبدء الهجمات الفعلية.
إذا كنت تدير بنية تحتية سحابية متعددة المستأجرين على KVM/arm64 — مثل AWS Graviton أو Ampere Altra أو أي منصة مشابهة — فعليك التعامل مع هذا كدورة تحديث طارئة فورية:
Comments
0 comments