
Primitiva di scrittura locale elevata: LiteBox v0.1.0 SNP UserPtr è NoValidation quindi il buffer delle syscall guest può essere un VA del kernel
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · litebox-snp-novalidation-userptr
Classe: Primitive di scrittura (R/W guest-to-SNP-kernel) Reach: Locale
LiteBox v0.1.0 (d8556e3) - Microsoft
SNP LinuxKernel collega UserConstPtr / UserMutPtr a NoValidation, che restituisce il puntatore invariato. Il commento è TODO: implement pointer validation to ensure the pointers are in user space. LVBS esegue già il controllo di intervallo USER_ADDR_MIN..USER_ADDR_END (0x10000 .. 0x7ffffffff000 su x86_64) e racchiude le copie in STAC/CLAC. SNP no. La mmap guest di un VA del kernel viene rifiutata (TASK_ADDR_MAX), quindi gli store CPL3 non possono colpire l'heap del kernel. Il percorso della syscall viene eseguito in modalità kernel e può farlo. memcpy_fallible è rep movsb in modalità supervisore.
Questo residuo è R/W guest-to-SNP-kernel (VMPL2 LiteBox). Non è host VMPL0, non è hypervisor e non è firmware SNP.
| ID | nessuna CVE al momento |
| Classe | Primitiva di scrittura (R/W guest-to-SNP-kernel) |
| Reach | Locale (userspace guest non attendibile all'interno di litebox_runner_snp) |
| CWE | CWE-823, CWE-119 |
| CVSS | Alto: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| Prodotto | microsoft/litebox |
| Affetto | v0.1.0 (d8556e33676e47244bfefa139c1e9ff95bd67d53) piattaforma kernel SNP. TODO ancora su origin/main al commit 97001fd |
| Auth | guest già in esecuzione all'interno della VM SNP |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1. Nessun hardware SNP |
Chi: userspace guest non attendibile all'interno di litebox_runner_snp. La issue #505 (RFC aperta) riguarda questa classe. LVBS l'ha implementata. SNP no.
Il laboratorio è un gadget copy_from_slice in modalità supervisore dei due validatori più una copia del pin litebox_platform_linux_kernel/src/lib.rs. Non è una syscall guest su hardware SNP.
| Percorso | Dest VA | Risultato |
|---|---|---|
SNP NoValidation (identità) | 0x1000 (sotto USER_ADDR_MIN) e 0xffff800000000000 (GVA_OFFSET) | accetta; memcpy scrive LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS nell'oggetto etichettato come kernel |
| Controllo di intervallo LVBS | stesse destinazioni kernel | rifiuta, errno=14 EFAULT, oggetto kernel vuoto |
| Entrambi | destinazione utente legale 0x400000 | entrambi copiano il witness nell'oggetto utente |
| File pin nell'immagine | n/a | commento TODO più UserConstPtr / UserMutPtr collegati a NoValidation (LvbsValidateAccess assente) |
| Metodo + sink | Privilegio |
|---|---|
read / readv / pread / recv* / getcwd / uname / epoll_pwait con buf = kernel VA -> UserMutPtr::copy_from_slice -> memcpy_fallible (rep movsb) | scrive fino a MAX_KERNEL_BUF_SIZE (512 KiB) per syscall, o chunk di pagina iovec, in qualsiasi kernel VA SNP mappato. Il payload è scelto dal guest (pipe/file scritto dal guest) |
| Metodo + sink | Privilegio |
|---|---|
write / writev / send* con buf = kernel VA -> read_at_offset | legge memoria kernel SNP mappata in un fd guest |
| kernel VA non mappato | EFAULT tramite la exception table (mappa di quali pagine kernel esistono) |
| Metodo + sink | Privilegio |
|---|---|
| corrompere heap kernel SNP / page table / TLS dello shim | crash o dirottamento del kernel guest SNP. Non rivendico un gadget RIP affidabile |
LvbsValidateAccess + STAC/CLAC)sysretq verso un RIP del kernel (sanitize_for_user_return rifiuta RIP/RSP non-utente)mmap / mprotect guest di kernel VA (TASK_ADDR_MAX)NoValidation userland Linux/Windows (stesso processo; il confine host lì è seccomp, quello è un residuo affine)litebox_platform_linux_kernel/src/lib.rs righe 59-67 su v0.1.0. Il TODO è ancora su main. LVBS ha già LvbsValidateAccess con USER_ADDR_MIN = 0x10000 e USER_ADDR_MAX = 0x7ffffffff000. Non avevo hardware SNP. Il laboratorio copia il file pin, implementa identità vs controllo di intervallo, e scrive il witness tramite NoValidation in dest VA che il controllo LVBS rifiuta.
cd lab
./run.sh
Loopback 127.0.0.1:19130. Progetto Compose litebox-snp-novalidation-userptr. Witness LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS. Ultima riga:
SUCCESS litebox-snp-novalidation-userptr novalidation-kernel-write-ok lvbs-range-reject pin-TODO-present user-range-copy-ok LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS
Collegare UserPtr di SNP allo stesso controllo di intervallo userspace che LVBS ha già (USER_ADDR_MIN..USER_ADDR_END), e mantenere le copie dietro la exception table. Non lasciare NoValidation su una piattaforma kernel.
L'intake del vendor è MSRC (https://msrc.microsoft.com/create-report). Non aprire una issue pubblica su GitHub per microsoft/litebox.
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]