CVE-2026-53360
KVM: SEV: اشتراط منطقة scratch داخل GHCB إذا كان GHCB الإصدار 2+ قيد الاستخدام
- تم النشر
- 04/07/2026
- محدث
- 05/08/2026
- تخصيص CNA
- Linux
- الأدلة المرصودة
- 08/08/2026
CVSS الأساسي
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:Hمنخفض · الثلاثين يومًا القادمة
- المئوية
- 15.8%
- تاريخ الموديل
- 21/09/2026
EPSS هو تقدير إحصائي، وليس يقينًا أو مقياسًا للتأثير. ادمجها مع CVSS وحالة KEV والتعرض وبيئتك.
ملخص
في نواة لينكس (Linux kernel)، تم إصلاح الثغرة الأمنية التالية: KVM: SEV: اشتراط وجود منطقة الكشط داخل GHCB عند استخدام GHCB v2+ وفقًا لمواصفة GHCB، عند استخدام GHCB v2+ يُشترط أن تقع منطقة الكشط البرمجية داخل المخزن المؤقت المشترك لـ GHCB. لاحظ أن أمورًا مثل طلبات تغيير حالة الصفحة (Page State Change - PSC) _تعتمد_ على هذا السلوك، إذ لا يمكن للضيف توفير طول عند إرسال الطلب، أي أن حجم حمولة الضيف محدود بحجم المخزن المؤقت المشترك. إن الفشل في فرض استخدام GHCB، إلى جانب جملة من العيوب الأخرى، يتيح لضيف SNP خبيث إفساد ذاكرة كومة نواة المضيف وتسريب معلومات تخطيط كومة المضيف. تخصص الدالة setup_vmgexit_scratch() مخزنًا عبر kvzalloc(exit_info_2)، حيث يكون exit_info_2 مُتحكمًا فيه من قبل الضيف. مع exit_info_2=24، ينتج عن ذلك تخصيص بحجم 24 بايت في kmalloc-cg-32 (كائنات slab بحجم 32 بايت). يحوي المخزن رأس psc_hdr بحجم 8 بايت تتبعه هياكل psc_entry بحجم 8 بايت، لذا فإن entries[0] وentries[1] فقط هما داخل الحدود. تتحقق snp_begin_psc() من end_entry مقابل VMGEXIT_PSC_MAX_COUNT (253) لكنها لا تتحقق إطلاقًا من الحجم الفعلي للمخزن: ```c idx_end = hdr->end_entry; if (idx_end >= VMGEXIT_PSC_MAX_COUNT) { // checks 253, not buffer snp_complete_psc(svm, ...); return 1; } for (idx = idx_start; idx <= idx_end; idx++) { entry_start = entries[idx]; // OOB when idx >= 2 ``` يضبط الضيف end_entry=10+، مما يجعل المضيف يمر على entries[2+] التي تكون خارج الحدود (OOB) باتجاه كائنات slab المجاورة. لكل إدخال خارج الحدود (OOB): - يقرأ المضيف 8 بايت (قراءة خارج الحدود / أوراكل تسريب المعلومات) - إذا اجتازت البيانات التحقق من PSC، تكتب __snp_complete_one_psc() cur_page = 1 أو 512 في الإدخال (كتابة خارج الحدود، sev.c:3806) - إذا فشل التحقق، يكشف استجابة الخطأ ما إذا كانت الذاكرة المجاورة صفرية أم غير صفرية (كشف معلومات للضيف) يتحكم الضيف في حجم التخصيص (exit_info_2) ونطاق الإدخالات (cur_entry/end_entry)، ويمكنه إطلاق عدد غير محدود من VMGEXITs لاستهداف مواضع slab مختلفة بشكل متكرر. من خلال استغلال تنوع هذه الأخطاء، يمكن لضيف SEV-SNP خبيث: - قراءة خارج الحدود (OOB) لكائنات kmalloc-cg-32 المجاورة (كشف تخطيط الكومة) - كتابة خارج الحدود (OOB) لبتات cur_page في الكائنات المجاورة (إفساد الكومة) - إحداث ظروف استخدام بعد التحرير (use-after-free) عبر VMGEXITs على سبيل المثال، مع تفعيل KASAN، ينتج عن تشغيل insmod واحد لوحدة الضيف PoC 73 تقرير KASAN: ```text BUG: KASAN: slab-out-of-bounds in snp_begin_psc+0x126/0x890 Read of size 8 at addr ffff888219ffb5e0 by task qemu-system-x86/2199 BUG: KASAN: slab-out-of-bounds in snp_begin_psc+0x468/0x890 Write of size 8 at addr ffff888351566648 by task qemu-system-x86/2199 The buggy address belongs to the object at ffff888XXXXXXXXX which belongs to the cache kmalloc-cg-32 of size 32 The buggy address is located N bytes to the right of allocated 32-byte region [ffff888XXXXXXXXX, ffff888XXXXXXXXX) ``` التفصيل: - 62 slab-out-of-bounds (قراءات وكتابات تتجاوز التخصيص) - 7 slab-use-after-free - 4 use-after-free كل الفضل يعود إلى Stan على الوصف الرائع وملف إعادة الإنتاج! [sean: write changelog]
الاستخدام المسؤول
استخدم معلومات الثغرات الأمنية فقط على الأنظمة التي تمتلكها أو المرخص لها باختبارها. يرتبط Kitploit ببيانات تعريف البحث العامة ولا يخزن أكواد الاستغلال أو الحمولات الضارة.