
VirtualBox 7.2.20 - حرجة - محلية - الخلط بين الأنواع / قراءة وكتابة عشوائية - SAS1068 CONFIG SCSI-SPI overlay
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-lsilogic-sas-config
الفئة: خلط الأنواع / قراءة وكتابة عشوائية الوصول: محلي (ضيف)
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
تعامل SAS1068 MPT CONFIG صفحة SCSI-SPI Port 0 كصفحة بحجم 12 بايت. على SAS، تلك الصفحة هي النصف الآخر من اتحاد (union): pManufacturingPage7 بالإضافة إلى cbManufacturingPage7. يؤدي CONFIG READ من الضيف إلى تسريب مؤشر الكومة عبر DMA. أما CONFIG WRITE فيزرع المؤشر والحجم. ثم تنسخ صفحة التصنيع 7 عبر المؤشر المزروع.
يحصل ring3 في الضيف على جهاز SAS1068 متصل (PDM LsiLogicSas، PCI 1000:0054) على قراءة/كتابة عشوائية في عملية VM. ذلك كومة VirtualBoxVM / VBoxHeadless، وليس هروبًا إلى نواة المضيف.
| المعرّف | لا يوجد CVE بعد |
| الفئة | خلط الأنواع / قراءة وكتابة عشوائية |
| الوصول | محلي (ضيف) |
| CWE | CWE-843، CWE-822 |
| CVSS | حرج: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| المنتج | VirtualBox OSS |
| المتأثر | 7.2.20 (f2792cf44) |
| المتطلبات | جهاز SAS1068 متصل (PDM LsiLogicSas، PCI 1000:0054) |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | أداة اختبار المصدر عبر loopback |
الطريقة: يقوم ring3 في الضيف ببرمجة جرس MMIO الخاص بـ SAS1068 أو طابور الطلبات (request FIFO) باستخدام MPT_MESSAGE_HDR_FUNCTION_CONFIG (0x04)، ونوع الصفحة SCSI-SPI Port 0 (0x03). يستدعي الإرسال (Dispatch) دائمًا دالة جلب SPI. فقط EXTENDED مقيّد بـ SAS. دالة جلب سمة الصفحة معلّقة (commented out)، لذا تظل صفحة Readonly Port 0 قابلة للكتابة. صفحة SPI Port 0 محزومة في 12 بايت وتتراكب مع SasPages.pManufacturingPage7 (8) بالإضافة إلى cbManufacturingPage7 (4).
| الصلاحية | النوع | الحالة | ما تمنحه |
|---|---|---|---|
| CONFIG SCSI-SPI Port 0 READ | استطلاع | مُثبت مختبريًا | DMA لمؤشر كومة عملية VM pManufacturingPage7 وحجمه إلى ذاكرة الضيف. مدخل لـ ASLR. |
| CONFIG SCSI-SPI Port 0 WRITE | سلامة | مُثبت مختبريًا | زرع مؤشر وحجم يختارهما الضيف فوق حقول SAS تلك |
| manufacturing page 7 CONFIG READ | سلامة | مُثبت مختبريًا | نسخ بايتات المضيف من العنوان المزروع إلى GPA الخاص بالضيف (VBOX-LSILOGIC-SAS-CONFIG-WITNESS) |
| manufacturing page 7 CONFIG WRITE | سلامة | مستنتج من نفس دالة الجلب | نسخ بايتات الضيف إلى العنوان المزروع (كتابة عشوائية في VirtualBoxVM) |
| صفحات SPI لـ Port 1 / Device 0 | استطلاع / سلامة | تراكب مستنتج | Port 1 يسرّب/يزرع pSASIOUnitPage0؛ Device 0 page 0 يصيب paPHYs؛ Device 0 page 1 يصيب pSASDeviceHead |
| مؤشر مزروع عشوائي | إتاحة | مستنتج | تعطيل عملية VM عند الوصول التالي لصفحة SAS أو عند lsilogicR3ConfigurationPagesFree |
مغلق ومجاور:
SpiPages هو التخطيط الحقيقي؛ خلط الأنواع هذا يحتاج SAS1068)VERR_NOT_FOUND)هذه قراءة/كتابة عشوائية في عملية VM، وليست هروبًا إلى نواة المضيف. لا يزال مستخدم المضيف الكامل بحاجة إلى بقايا تحصين. لم أقرنها بكتابة 3D متبقية: ثغرة VMSVGA DX11 UAF (d691aa68) مغلقة على هذا الإصدار المثبّت.
لا Guest Additions. لا 3D. لا VRDP. ليس PUEL. يكفي ring3 ضيف عدائي؛ ولا حاجة إلى برنامج التشغيل المدمج mpt/mptsas.
جلستُ على OSS 7.2.20 بعد تحديث CPU لشهر سبتمبر 2026 وتتبّعتُ LsiLogic MPT CONFIG. تسريب reply-stack الصامت لعام 2026 مُغلق بالفعل: 122c6880 يقوم بـ RT_ZERO لـ MptReplyUnion عند خطأ SCSI I/O. كنتُ أبحث عن بقية من تلك الفئة، لا عن ذلك المصب.
البقية عبارة عن union، وليست ردًّا على المكدس:
union {
MptConfigurationPagesSpi SpiPages;
MptConfigurationPagesSas SasPages;
} u; /* DevLsiLogicSCSI.h:3323 */
SAS alloc يملأ مؤشرات المضيف SasPages ولا يشغّل تهيئة صفحة SPI أبدًا. لا يحتوي getter منفذ SPI في DevLsiLogicSCSI.cpp:2795 على فحص enmCtrlType. حالات SPI في إرسال CONFIG غير مقيّدة. getter خاصية الصفحة معلّق في cpp:3159. صفحة التصنيع 7 في cpp:2701 مقيّدة بـ SAS، وهو المسار المقصود، وتقوم بإلغاء مرجعية pManufacturingPage7 دون فحص NULL. هكذا يتحول READ/WRITE من نوع SPI على المنفذ 0 إلى تسريب مؤشر SAS وزرعه.
المنعطفات الخاطئة المسجّلة سابقًا: إعادة تقديم 122c6880؛ التعامل مع LSI53C1030 الافتراضي على أنه هذا العلة؛ تضخيم انهيار مؤشر عشوائي إلى هروب من نواة المضيف؛ تشغيل VM حيّة بينما الطبقة المتراكبة المعبأة كافية. المسرح: reverse shell. الحكم هو بيانات صفحة CONTROL الوهمية، ثم تسريب/زرع/قراءة عشوائية لـ VBOX-LSILOGIC-SAS-CONFIG-WITNESS.
cd lab
./run.sh
أو python3 vbox-lsilogic-sas-config-Abraxas-Labs.py. مصدر تجهيز بنى pin. لا يتم إقلاع VirtualBox. مشروع Compose باسم vbox-lsilogic-sas-config، network_mode: none. لا تربط شيئًا.
CONTROL: قراءة overlay على المنفذ 0 من نوع SPI هي بيانات صفحة وهمية، وليست مؤشر heap الخاص بصفحة التصنيع 7.
SAS مرتبك: قراءة المنفذ 0 تسرّب pManufacturingPage7 المطابق لـ calloc. كتابة المنفذ 0 تزرع مؤشر مخزن مؤقت شاهد ثانٍ + الحجم. getter صفحة التصنيع 7 مع قراءة CONFIG ينسخ الشاهد إلى مصفوفة GPA الخاصة بالضيف.
SUCCESS vbox-lsilogic-sas-config leak=yes plant=yes arb-read=yes VBOX-LSILOGIC-SAS-CONFIG-WITNESS
قيّد أنواع صفحات SCSI-SPI على enmCtrlType == LSILOGICCTRLTYPE_SCSI_SPI. أعد فحص سمة الصفحة بحيث تبقى Readonly Port 0 للقراءة فقط. تحقق من pManufacturingPage7 (وغيرها من مؤشرات SAS) مقابل NULL قبل إلغاء الإشارة. أوقف تراكب SpiPages وSasPages في اتحاد واحد.
f2792cf44f663989818507e36d3db5f978523c5e)DevLsiLogicSCSI.h الاتحاد عند 3323؛ حجم SPI Port 0 هو 12 عند 2251DevLsiLogicSCSI.cpp تخصيص SAS عند 619؛ دالة جلب manufacturing عند 2701؛ دالة جلب SPI Port عند 2795؛ سمة الصفحة معلّقة عند 3159؛ CONFIG READ/WRITE عند 3293122c6880 (مكدس خطأ الإدخال/الإخراج SCSI في MptReplyUnion)