
Primitiva de escritura local alta: LiteBox v0.1.0 SNP UserPtr es NoValidation, por lo que el búfer de llamada al sistema del invitado puede ser una VA del kernel
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · litebox-snp-novalidation-userptr
Clase: Primitiva de escritura (R/W de invitado a kernel SNP) Alcance: Local
LiteBox v0.1.0 (d8556e3) - Microsoft
El LinuxKernel de SNP conecta UserConstPtr / UserMutPtr a NoValidation, que devuelve el puntero sin cambios. El comentario es TODO: implement pointer validation to ensure the pointers are in user space. LVBS ya verifica el rango USER_ADDR_MIN..USER_ADDR_END (0x10000 .. 0x7ffffffff000 en x86_64) y envuelve las copias en STAC/CLAC. SNP no lo hace. El mmap de invitado de una VA del kernel es rechazado (TASK_ADDR_MAX), por lo que los almacenes CPL3 no pueden alcanzar el heap del kernel. La ruta de syscall se ejecuta en modo kernel y sí puede. memcpy_fallible es rep movsb en modo supervisor.
Este remanente es R/W de invitado a kernel SNP (VMPL2 LiteBox). No es host VMPL0, ni hipervisor, ni firmware SNP.
| ID | sin CVE todavía |
| Clase | Primitiva de escritura (R/W de invitado a kernel SNP) |
| Alcance | Local (espacio de usuario de invitado no confiable dentro de 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 |
| Producto | microsoft/litebox |
| Afectado | v0.1.0 (d8556e33676e47244bfefa139c1e9ff95bd67d53) plataforma de kernel SNP. El TODO sigue en origin/main a fecha de 97001fd |
| Auth | invitado ya en ejecución dentro de la VM SNP |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1. Sin hardware SNP |
Quién: espacio de usuario de invitado no confiable dentro de litebox_runner_snp. El issue #505 (RFC abierto) es de esta clase. LVBS lo implementó. SNP no.
El laboratorio es un gadget copy_from_slice en modo supervisor de los dos validadores más una copia del pin litebox_platform_linux_kernel/src/lib.rs. No es una syscall de invitado sobre hardware SNP.
| Ruta | VA destino | Resultado |
|---|---|---|
SNP NoValidation (identidad) | 0x1000 (por debajo de USER_ADDR_MIN) y 0xffff800000000000 (GVA_OFFSET) | acepta; memcpy escribe LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS en el objeto etiquetado como kernel |
| Verificación de rango de LVBS | mismos destinos de kernel | rechaza, errno=14 EFAULT, objeto de kernel vacío |
| Ambos | destino de usuario legal 0x400000 | ambos copian el testigo en el objeto de usuario |
| Archivo pin en la imagen | n/a | comentario TODO más UserConstPtr / UserMutPtr conectados a NoValidation (LvbsValidateAccess ausente) |
| Método + sink | Privilegio |
|---|---|
read / readv / pread / recv* / getcwd / uname / epoll_pwait con buf = VA de kernel -> UserMutPtr::copy_from_slice -> memcpy_fallible (rep movsb) | escribir hasta MAX_KERNEL_BUF_SIZE (512 KiB) por syscall, o fragmentos de página de iovec, en cualquier VA de kernel SNP mapeada. El payload lo elige el invitado (pipe/archivo que el invitado escribió) |
| Método + sink | Privilegio |
|---|---|
write / writev / send* con buf = VA de kernel -> read_at_offset | leer memoria de kernel SNP mapeada hacia un fd de invitado |
| VA de kernel no mapeada | EFAULT a través de la tabla de excepciones (mapa de qué páginas de kernel existen) |
| Método + sink | Privilegio |
|---|---|
| corromper el heap del kernel SNP / tablas de páginas / TLS del shim | provocar un crash o desviar el kernel de invitado SNP. No afirmo un gadget RIP fiable |
LvbsValidateAccess + STAC/CLAC)sysretq a un RIP de kernel (sanitize_for_user_return rechaza RIP/RSP que no sean de usuario)mmap / mprotect de invitado de VA de kernel (TASK_ADDR_MAX)NoValidation de espacio de usuario de Linux/Windows (mismo proceso; la frontera del host allí es seccomp, ese es un remanente hermano)litebox_platform_linux_kernel/src/lib.rs líneas 59-67 en v0.1.0. El TODO sigue en main. LVBS ya tiene LvbsValidateAccess con USER_ADDR_MIN = 0x10000 y USER_ADDR_MAX = 0x7ffffffff000. No tenía hardware SNP. El laboratorio copia el archivo pin, implementa identidad vs verificación de rango, y escribe el testigo a través de NoValidation en VAs destino que la verificación de LVBS rechaza.
cd lab
./run.sh
Loopback 127.0.0.1:19130. Proyecto de Compose litebox-snp-novalidation-userptr. Testigo LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS. Última línea:
SUCCESS litebox-snp-novalidation-userptr novalidation-kernel-write-ok lvbs-range-reject pin-TODO-present user-range-copy-ok LITEBOX-SNP-NOVALIDATION-USERPTR-WITNESS
Conectar el UserPtr de SNP a la misma verificación de rango de espacio de usuario que LVBS ya tiene (USER_ADDR_MIN..USER_ADDR_END), y mantener las copias detrás de la tabla de excepciones. No dejar NoValidation en una plataforma de kernel.
La recepción del proveedor es MSRC (https://msrc.microsoft.com/create-report). No abrir un issue público en GitHub sobre microsoft/litebox.
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]