
استغلال PoC لثغرة CVE-2026-64561، وهي ثغرة use-after-free في shadow MMU الخاصة بـ KVM/x86 تتيح الهروب من الضيف إلى المضيف مع تنفيذ كود بصلاحيات الجذر داخل نواة النظام على المضيف.

تصف هذه الوثيقة ثغرة Zapscape (CVE-2026-64561) التي اكتشفها وأبلغ عنها Hyunwoo Kim (@v4bel). وهي ثغرة هروب من KVM تسمح للضيف بالهروب إلى المضيف في بيئة KVM/x86 وتنفيذ أوامر على المضيف بصلاحيات النواة (root).
Zapscape هي ثغرة استخدام بعد التحرير (use-after-free) في محاكاة الذاكرة الظلية MMU الخاصة بـ KVM/x86، وتحديدًا في مسار zap العودي الذي يعمل عند استرداد الصفحات الظلية. يمكنها إثارة الخلل بإجراءات من جانب الضيف وحده لإفساد الصفحة الظلية لنواة المضيف، ويمكنها تهديد عزل الضيف عن المضيف في مضيفات KVM/x86 التي تقبل ضيوفًا غير موثوقين وتتيح المحاكاة الافتراضية المتداخلة، ولا سيما السحابات العامة x86 متعددة المستأجرين.
للمعلومات التقنية التفصيلية، انظر هنا.
[!NOTE] بعد الإبلاغ عن هذه الثغرة إلى [email protected]، انتهى الحظر المتفق عليه، لذلك نُشر الاستغلال على oss-security وتم نشر وثيقة Zapscape هذه. للاطلاع على الجدول الزمني للإفصاح، راجع وثيقة التفاصيل التقنية.
كُتب الإثبات المفاهيمي (PoC) لاستهداف AMD، وللاختبار الآمن يُنصح بتشغيله تحت QEMU TCG. يمتلك الإثبات المفاهيمي البنية التالية.
L0: Linux 7.1.3 + KVM_AMD on an x86_64 CPU (AMD SVM/NPT) emulated by QEMU TCG. The escape target
└─ L1: the guest poc creates. Switching long -> PAE aliases one shadow page as both child and pinned root, and L1 then escalates the UAF into L0 kernel code-exec
└─ L2: the guest L1 VMRUNs. Its memory touches trigger L0's quota reclaim -> recursive zap with no root_count guard -> UAF
هذا الإثبات المفاهيمي ليس استغلالًا مُسلّحًا يعمل فورًا في بيئة سحابية، بل هو كود توضيحي يعيد إنتاج الثغرة وسلسلة الاستغلال الكاملة فوق QEMU TCG. لاستخدامه في بيئة سحابية حقيقية، يجب نقل إجراءات L1 التي ينفذها الإثبات المفاهيمي إلى وحدة نواة ضيف، ويجب نقل الاستغلال ليتوافق مع kconfig الخاصة بنواة المضيف. هذه ليست مهمة صعبة.
# gcc -O2 -g -static -pthread poc.c -o poc
# ./qemu.sh bzImage initramfs.cpio.gz
/$$$$$$$$ /$$$$$$ /$$$$$$$
|_____ $$ /$$__ $$| $$__ $$
/$$/ | $$ \ $$| $$ \ $$
/$$/ | $$$$$$$$| $$$$$$$/
/$$/ | $$__ $$| $$____/
/$$/ | $$ | $$| $$
/$$$$$$$$| $$ | $$| $$
|________/|__/ |__/|__/
[+] /Zapscape created by the target KVM host kernel (owner uid=0, mode=0644).
[+] exploit completed - verify with: ls -la /Zapscape
zapscape(uid=65534)$ ls -la /Zapscape
-rw-r--r-- 1 root root 0 Jul 29 05:27 /Zapscape
zapscape(uid=65534)$
يهدف هذا الإثبات المفاهيمي إلى توفير معلومات دقيقة. لا تستخدمه على أنظمة غير مصرح لك باختبارها.
تغطي Zapscape (CVE-2026-64561) النطاق من f95eec9bed76 (2020-07-08) إلى 2abd5287f083 (2026-07-21).
نفس أثر Januscape (CVE-2026-53359):
/dev/kvm قابلًا للكتابة من الجميع (0666)، لذلك يمكن لمستخدم غير مميز أيضًا استخدام هذه الثغرة كـ LPE للحصول على صلاحيات root. عند استخدامها كـ LPE، تتوفر ioctls الخاصة بـ VMM من جانب المضيف، لذا يصبح الاستغلال أسهل وأكثر استقرارًا.تحدث في نفس الذاكرة الظلية MMU، لكنها ثغرة منفصلة بجذر مختلف تمامًا.
ومع ذلك، وعلى عكس Januscape، على معالجات Intel يمكن إثارة الثغرة فقط عندما يكون كل من طولي تجول صفحات EPT (4 و5) مكشوفين لـ L1. هذه نقطة مهمة عند تقييم النطاق المتأثر، لذا يجب فهمها بدقة. راجع وثيقة التفاصيل التقنية.
لا. كما هو الحال مع Januscape، تحدث في KVM داخل النواة، لذا تُثار بشكل مستقل عن محاكاة QEMU. بسبب ذلك، يمكنها أيضًا تهديد السحابات العامة الكبيرة التي تنفّذ وتستخدم حزمة المحاكاة الافتراضية الخاصة بها.
نعم. مطلوب صلاحيات نواة L1. عندما يُخصص لك مثيل على سحابة عامة، يكون لديك عادةً صلاحيات root على جهازك الافتراضي الخاص، لذلك يتحقق هذا الشرط. في سيناريو بدون صلاحيات root للضيف، يجب ربطها مع LPE مثل Dirty Frag.
نعم. أوصي بإنشاء عملية تصحيح مستدامة لمُشغِّلات المضيف. الشتاء قادم.
آمل ألا يكون كذلك.