
بدائية كتابة محلية عالية: LiteBox v0.1.0 SNP UserPtr هو NoValidation لذا يمكن أن يكون buf استدعاء النظام للضيف عنوانًا افتراضيًا للنواة
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · litebox-snp-novalidation-userptr
الفئة: بدائية كتابة (قراءة/كتابة من الضيف إلى نواة SNP) الوصول: محلي
LiteBox v0.1.0 (d8556e3) - Microsoft
SNP LinuxKernel يربط UserConstPtr / UserMutPtr بـ NoValidation، الذي يعيد المؤشر دون تغيير. التعليق هو TODO: implement pointer validation to ensure the pointers are in user space. يقوم LVBS بالفعل بفحص النطاق USER_ADDR_MIN..USER_ADDR_END (0x10000 .. 0x7ffffffff000 على x86_64) ويلف النسخ في STAC/CLAC. لا يفعل SNP ذلك. يتم رفض mmap من الضيف لعنوان افتراضي للنواة (TASK_ADDR_MAX)، لذا لا يمكن لمخازن CPL3 الوصول إلى كومة النواة. مسار استدعاء النظام يعمل في وضع النواة ويمكنه ذلك. memcpy_fallible هو rep movsb في وضع المشرف.
هذه بقية من الضيف إلى نواة SNP (VMPL2 LiteBox) للقراءة/الكتابة. ليست VMPL0 المضيف، وليست برنامجًا فائقًا، وليست برنامج SNP الثابت.
| المعرّف | لا يوجد CVE بعد |
| الفئة | بدائية كتابة (قراءة/كتابة من الضيف إلى نواة SNP) |
| الوصول | محلي (مساحة مستخدم ضيف غير موثوقة داخل litebox_runner_snp) |
| CWE | CWE-823، CWE-119 |
| CVSS | مرتفع: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| المنتج | microsoft/litebox |
| المتأثر | v0.1.0 (d8556e33676e47244bfefa139c1e9ff95bd67d53) منصة نواة SNP. لا يزال TODO على origin/main حتى 97001fd |
| المصادقة | الضيف يعمل بالفعل داخل جهاز SNP الافتراضي |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط. لا يوجد عتاد SNP |
من: مساحة مستخدم ضيف غير موثوقة داخل litebox_runner_snp. القضية #505 (RFC مفتوح) هي هذه الفئة. نفّذها LVBS. لم يفعل SNP ذلك.
المختبر هو أداة copy_from_slice في وضع المشرف للمدققين بالإضافة إلى نسخة من ملف التثبيت litebox_platform_linux_kernel/src/lib.rs. ليس استدعاء نظام من الضيف على عتاد SNP.
| المسار | عنوان الوجهة الافتراضي | النتيجة |
|---|---|---|
SNP NoValidation (مطابقة) | 0x1000 (أقل من USER_ADDR_MIN) و 0xffff800000000000 (GVA_OFFSET) | قبول؛ يكتب memcpy LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS في الكائن المُعنون بالنواة |
| فحص نطاق LVBS | نفس وجهات النواة | رفض، errno=14 EFAULT، كائن النواة فارغ |
| كلاهما | وجهة مستخدم قانونية 0x400000 | كلاهما ينسخ الشاهد إلى كائن المستخدم |
| ملف التثبيت في الصورة | لا ينطبق | تعليق TODO بالإضافة إلى UserConstPtr / UserMutPtr مرتبطين بـ NoValidation (LvbsValidateAccess غائب) |
| الطريقة + المصب | الصلاحية |
|---|---|
read / readv / pread / recv* / getcwd / uname / epoll_pwait مع buf = عنوان افتراضي للنواة -> UserMutPtr::copy_from_slice -> memcpy_fallible (rep movsb) | كتابة حتى MAX_KERNEL_BUF_SIZE (512 كيلوبايت) لكل استدعاء نظام، أو أجزاء صفحة iovec، في أي عنوان افتراضي لنواة SNP مُعنون. الحمولة يختارها الضيف (أنبوب/ملف كتبه الضيف) |
| الطريقة + المصب | الصلاحية |
|---|---|
write / writev / send* مع buf = عنوان افتراضي للنواة -> read_at_offset | قراءة ذاكرة نواة SNP المُعنونة إلى واصف ملف الضيف |
| عنوان افتراضي للنواة غير مُعنون | EFAULT عبر جدول الاستثناءات (معيّن لصفحات النواة الموجودة) |
| الطريقة + المصب | الصلاحية |
|---|---|
| إفساد كومة نواة SNP / جداول الصفحات / shim TLS | تعطّل أو تحويل نواة ضيف SNP. لا أدّعي وجود أداة RIP موثوقة |
LvbsValidateAccess + STAC/CLAC)sysretq إلى RIP النواة (sanitize_for_user_return يرفض RIP/RSP غير المستخدم)mmap / mprotect من الضيف لعنوان افتراضي للنواة (TASK_ADDR_MAX)NoValidation في مساحة مستخدم Linux/Windows (نفس العملية؛ الحدود المضيفة هناك هي seccomp، وهذا خلل متبقٍ شقيق)litebox_platform_linux_kernel/src/lib.rs الأسطر 59-67 على v0.1.0. لا يزال TODO على main. يمتلك LVBS بالفعل LvbsValidateAccess مع USER_ADDR_MIN = 0x10000 و USER_ADDR_MAX = 0x7ffffffff000. لم يكن لدي عتاد SNP. ينسخ المختبر ملف التثبيت، وينفذ المطابقة مقابل فحص النطاق، ويكتب الشاهد عبر NoValidation في عناوين الوجهة الافتراضية التي يرفضها فحص LVBS.
cd lab
./run.sh
Loopback 127.0.0.1:19130. مشروع Compose litebox-snp-novalidation-userptr. الشاهد LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS. السطر الأخير:
SUCCESS litebox-snp-novalidation-userptr novalidation-kernel-write-ok lvbs-range-reject pin-TODO-present user-range-copy-ok LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS
اربط SNP UserPtr بنفس فحص نطاق مساحة المستخدم الذي يمتلكه LVBS بالفعل (USER_ADDR_MIN..USER_ADDR_END)، وأبقِ النسخ خلف جدول الاستثناءات. لا تترك NoValidation على منصة نواة.
استقبال المورّد هو MSRC (https://msrc.microsoft.com/create-report). لا تفتح قضية GitHub عامة على microsoft/litebox.
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]