
Hohe lokale Schreibprimitive: LiteBox v0.1.0 SNP UserPtr ist NoValidation, sodass der Guest-Syscall-Puffer eine Kernel-VA sein kann
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · litebox-snp-novalidation-userptr
Klasse: Write-Primitive (Guest-zu-SNP-Kernel R/W) Reichweite: Lokal
LiteBox v0.1.0 (d8556e3) - Microsoft
SNP LinuxKernel verdrahtet UserConstPtr / UserMutPtr mit NoValidation, was den Zeiger unverändert zurückgibt. Der Kommentar lautet TODO: implement pointer validation to ensure the pointers are in user space. LVBS prüft bereits den Bereich USER_ADDR_MIN..USER_ADDR_END (0x10000 .. 0x7ffffffff000 auf x86_64) und umschließt Kopien mit STAC/CLAC. SNP tut dies nicht. Guest-mmap einer Kernel-VA wird abgelehnt (TASK_ADDR_MAX), sodass CPL3-Stores den Kernel-Heap nicht treffen können. Der Syscall-Pfad läuft im Kernel-Modus und kann es. memcpy_fallible ist rep movsb im Supervisor-Modus.
Dieser Überrest ist Guest-zu-SNP-Kernel (VMPL2 LiteBox) R/W. Er ist nicht Host-VMPL0, nicht Hypervisor und nicht SNP-Firmware.
| ID | noch keine CVE |
| Klasse | Write-Primitive (Guest-zu-SNP-Kernel R/W) |
| Reichweite | Lokal (nicht vertrauenswürdiger Guest-Userspace innerhalb von litebox_runner_snp) |
| CWE | CWE-823, CWE-119 |
| CVSS | Hoch: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| Produkt | microsoft/litebox |
| Betroffen | v0.1.0 (d8556e33676e47244bfefa139c1e9ff95bd67d53) SNP-Kernel-Plattform. TODO noch auf origin/main Stand 97001fd |
| Auth | Guest läuft bereits innerhalb der SNP-VM |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1. Keine SNP-Hardware |
Wer: nicht vertrauenswürdiger Guest-Userspace innerhalb von litebox_runner_snp. Issue #505 (offener RFC) ist diese Klasse. LVBS hat sie implementiert. SNP nicht.
Das Lab ist ein Supervisor-Modus-copy_from_slice-Gadget der beiden Validatoren plus eine Kopie der Pin-Datei litebox_platform_linux_kernel/src/lib.rs. Es ist kein Guest-Syscall auf SNP-Hardware.
| Pfad | Ziel-VA | Ergebnis |
|---|---|---|
SNP NoValidation (Identität) | 0x1000 (unterhalb USER_ADDR_MIN) und 0xffff800000000000 (GVA_OFFSET) | akzeptiert; memcpy schreibt LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS in das als Kernel gekennzeichnete Objekt |
| LVBS-Bereichsprüfung | dieselben Kernel-Ziele | abgelehnt, errno=14 EFAULT, Kernel-Objekt leer |
| Beide | legales User-Ziel 0x400000 | beide kopieren den Witness in das User-Objekt |
| Pin-Datei im Image | n/a | TODO-Kommentar plus UserConstPtr / UserMutPtr mit NoValidation verdrahtet (LvbsValidateAccess fehlt) |
| Methode + Sink | Privileg |
|---|---|
read / readv / pread / recv* / getcwd / uname / epoll_pwait mit buf = Kernel-VA -> UserMutPtr::copy_from_slice -> memcpy_fallible (rep movsb) | schreibt bis zu MAX_KERNEL_BUF_SIZE (512 KiB) pro Syscall, oder iovec-Seitenblöcke, in jede gemappte SNP-Kernel-VA. Payload ist vom Guest gewählt (Pipe/Datei, die der Guest geschrieben hat) |
| Methode + Sink | Privileg |
|---|---|
write / writev / send* mit buf = Kernel-VA -> read_at_offset | liest gemappten SNP-Kernel-Speicher in einen Guest-fd |
| nicht gemappte Kernel-VA | EFAULT über die Exception-Tabelle (Mapper, welche Kernel-Seiten existieren) |
| Methode + Sink | Privileg |
|---|---|
| SNP-Kernel-Heap / Seitentabellen / Shim-TLS korrumpieren | Absturz oder Umleitung des SNP-Guest-Kernels. Ich behaupte kein zuverlässiges RIP-Gadget |
LvbsValidateAccess + STAC/CLAC)sysretq zu einem Kernel-RIP (sanitize_for_user_return verweigert Nicht-User-RIP/RSP)mmap / mprotect einer Kernel-VA (TASK_ADDR_MAX)NoValidation (gleicher Prozess; die Host-Grenze dort ist seccomp, das ist ein verwandter Überrest)litebox_platform_linux_kernel/src/lib.rs Zeilen 59-67 in v0.1.0. Das TODO ist noch auf main. LVBS hat bereits LvbsValidateAccess mit USER_ADDR_MIN = 0x10000 und USER_ADDR_MAX = 0x7ffffffff000. Ich hatte keine SNP-Hardware. Das Lab kopiert die Pin-Datei, implementiert Identität vs. Bereichsprüfung und schreibt den Witness durch NoValidation in Ziel-VAs, die die LVBS-Prüfung ablehnt.
cd lab
./run.sh
Loopback 127.0.0.1:19130. Compose-Projekt litebox-snp-novalidation-userptr. Witness LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS. Letzte Zeile:
SUCCESS litebox-snp-novalidation-userptr novalidation-kernel-write-ok lvbs-range-reject pin-TODO-present user-range-copy-ok LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS
Verdrahte SNP UserPtr mit derselben Userspace-Bereichsprüfung, die LVBS bereits hat (USER_ADDR_MIN..USER_ADDR_END), und halte Kopien hinter der Exception-Tabelle. Lass NoValidation nicht auf einer Kernel-Plattform stehen.
Vendor-Intake ist MSRC (https://msrc.microsoft.com/create-report). Öffne kein öffentliches GitHub-Issue auf microsoft/litebox.
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]