
उच्च स्थानीय लेखन प्रिमिटिव: LiteBox v0.1.0 SNP UserPtr NoValidation है इसलिए guest syscall buf एक kernel VA हो सकता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · litebox-snp-novalidation-userptr
Class: Write primitive (guest-to-SNP-kernel R/W) Reach: Local
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 ऐसा नहीं करता। कर्नेल VA का गेस्ट mmap अस्वीकार कर दिया जाता है (TASK_ADDR_MAX), इसलिए CPL3 स्टोर कर्नेल हीप को हिट नहीं कर सकते। सिसकॉल पाथ कर्नेल मोड में चलता है और कर सकता है। memcpy_fallible सुपरवाइज़र मोड में rep movsb है।
यह अवशेष guest-to-SNP-kernel (VMPL2 LiteBox) R/W है। यह होस्ट VMPL0 नहीं, हाइपरवाइज़र नहीं, और SNP फर्मवेयर नहीं है।
| ID | अभी तक कोई CVE नहीं |
| Class | Write primitive (guest-to-SNP-kernel R/W) |
| Reach | Local (litebox_runner_snp के अंदर अविश्वसनीय गेस्ट यूज़रस्पेस) |
| CWE | CWE-823, CWE-119 |
| CVSS | High: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| Product | microsoft/litebox |
| Affected | v0.1.0 (d8556e33676e47244bfefa139c1e9ff95bd67d53) SNP kernel platform. TODO अभी भी origin/main पर 97001fd तक मौजूद है |
| Auth | गेस्ट पहले से ही SNP VM के अंदर चल रहा है |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1। कोई SNP हार्डवेयर नहीं |
कौन: litebox_runner_snp के अंदर अविश्वसनीय गेस्ट यूज़रस्पेस। Issue #505 (खुला RFC) इसी श्रेणी का है। LVBS ने इसे लागू किया। SNP ने नहीं।
लैब दोनों वैलिडेटरों का सुपरवाइज़र-मोड copy_from_slice गैजेट है साथ ही pin litebox_platform_linux_kernel/src/lib.rs की एक प्रति। यह SNP हार्डवेयर पर गेस्ट सिसकॉल नहीं है।
| Path | Dest VA | Result |
|---|---|---|
SNP NoValidation (identity) | 0x1000 (USER_ADDR_MIN से नीचे) और 0xffff800000000000 (GVA_OFFSET) | स्वीकार; memcpy कर्नेल-लेबल वाले ऑब्जेक्ट में LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS लिखता है |
| LVBS range check | वही कर्नेल dests | अस्वीकार, errno=14 EFAULT, कर्नेल ऑब्जेक्ट खाली |
| Both | वैध यूज़र dest 0x400000 | दोनों witness को यूज़र ऑब्जेक्ट में कॉपी करते हैं |
| इमेज में pin फ़ाइल | n/a | TODO टिप्पणी साथ ही UserConstPtr / UserMutPtr NoValidation से जुड़े (LvbsValidateAccess अनुपस्थित) |
| Method + sink | Privilege |
|---|---|
read / readv / pread / recv* / getcwd / uname / epoll_pwait जिसमें buf = कर्नेल VA -> UserMutPtr::copy_from_slice -> memcpy_fallible (rep movsb) | प्रति सिसकॉल MAX_KERNEL_BUF_SIZE (512 KiB) तक, या iovec पेज चंक्स, किसी भी मैप्ड SNP कर्नेल VA में लिखें। पेलोड गेस्ट-चयनित है (गेस्ट द्वारा लिखी गई pipe/फ़ाइल) |
| Method + sink | Privilege |
|---|---|
write / writev / send* जिसमें buf = कर्नेल VA -> read_at_offset | मैप्ड SNP कर्नेल मेमोरी को गेस्ट fd में पढ़ें |
| अनमैप्ड कर्नेल VA | एक्सेप्शन टेबल के माध्यम से EFAULT (कौन से कर्नेल पेज मौजूद हैं इसका मैपर) |
| Method + sink | Privilege |
|---|---|
| SNP कर्नेल हीप / पेज टेबल / shim TLS को भ्रष्ट करें | SNP गेस्ट कर्नेल को क्रैश या डाइवर्ट करें। मैं विश्वसनीय RIP गैजेट का दावा नहीं करता |
LvbsValidateAccess + STAC/CLAC)sysretq (sanitize_for_user_return गैर-यूज़र RIP/RSP को अस्वीकार करता है)mmap / mprotect (TASK_ADDR_MAX)NoValidation (वही प्रोसेस; वहाँ होस्ट सीमा seccomp है, वह एक सहोदर अवशेष है)v0.1.0 पर litebox_platform_linux_kernel/src/lib.rs पंक्तियाँ 59-67। TODO अभी भी main पर है। LVBS में पहले से ही LvbsValidateAccess है जिसमें USER_ADDR_MIN = 0x10000 और USER_ADDR_MAX = 0x7ffffffff000 हैं। मेरे पास SNP हार्डवेयर नहीं था। लैब pin फ़ाइल को कॉपी करता है, identity बनाम range check लागू करता है, और NoValidation के माध्यम से witness को उन dest VAs में लिखता है जिन्हें LVBS चेक अस्वीकार करता है।
cd lab
./run.sh
Loopback 127.0.0.1:19130। Compose प्रोजेक्ट litebox-snp-novalidation-userptr। Witness 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 न छोड़ें।
Vendor intake MSRC है (https://msrc.microsoft.com/create-report)। microsoft/litebox पर सार्वजनिक GitHub issue न खोलें।
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]