
VirtualBox 7.2.20 - Alta - Local - Lectura de archivos - OVF NAT TFTP prefijo vacío
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-ovf-nat-tftp-prefix
Clase: Lectura de archivos Alcance: Local (invitado) tras la importación UI:R
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle
La importación de OVF vbox:Machine saneó ExtraData, las carpetas compartidas, la ruta de NVRAM y el RawFile del puerto serie. Nunca toca enable-tftp de NAT ni el @prefix de TFTP. libslirp deshabilita TFTP solo cuando tftp_prefix es NULL. El g_strdup("") de DrvNAT permanece no NULL. Una RRQ del invitado a etc/passwd con prefijo / o vacío se convierte en /etc/passwd. El ../ en el nombre del invitado sigue siendo rechazado.
Un NAT TFTP importado con un prefijo vacío o / permite al invitado hacer RRQ de archivos del host con el UID de VBox. No es una escritura. No es el kernel del host. No es un residuo de la comprobación cerrada de ../.
| ID | aún sin CVE |
| Clase | Lectura de archivos (RRQ TFTP del invitado sobre rutas del host) |
| Alcance | Local (invitado) tras la importación UI:R de un OVF vbox:Machine, y luego el arranque de la VM |
| CWE | CWE-22 residuo de la clase de prefijo de CVE-2022-21394 |
| CVSS | Alta: 7.7 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N |
| Producto | Oracle VM VirtualBox OSS |
| Afectado | 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e) |
| Autenticación | ninguna en el invitado; el usuario del host debe Importar y luego Iniciar |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | arnés de código fuente; compose en loopback; VirtualBox no se arranca |
Distribuir un OVF/OVA vbox:Machine cuyo blob NAT tenga enable-tftp y un prefijo TFTP / o vacío, junto con un disco de invitado que emita RRQ TFTP a la puerta de enlace NAT (10.0.2.2:69). El usuario del host importa (Archivo / Importar o VBoxManage import) e inicia la VM. La importación limpia ExtraData, las carpetas compartidas, el RawFile del puerto serie y la ruta de NVRAM. Los campos de TFTP sobreviven. Al iniciar, ConsoleImplConfigCommon inserta EnableTFTP. El prefijo vacío se omite de CFGM; DrvNAT entonces pone por defecto TFTPPrefix a "" y le aplica g_strdup. libslirp lo trata como habilitado.
Ese es el conjunto completo de privilegios. Nada de esto es una escritura en el host, una primitiva de heap en el proceso de la VM ni un escape del kernel.
| Método | Destino | Privilegio |
|---|---|---|
RRQ TFTP de oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS con prefijo importado "" | tftp_handle_rrq de libslirp y luego RTFileOpen de prefijo + / + nombre del invitado | Probado en laboratorio. El prefijo vacío permanece no NULL. La ruta construida es /oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS. La apertura de solo lectura devolvió los bytes del testigo. |
RRQ TFTP del mismo nombre con prefijo importado / | igual | Probado en laboratorio. La ruta construida es //oracle/..., equivalente en POSIX a /oracle/.... Se devolvieron los bytes del testigo. |
Análogo solo de ruta de la RRQ del invitado etc/passwd con prefijo vacío | "" + "/" + "etc/passwd" | Construcción de ruta probada en laboratorio. El resultado es /etc/passwd. El laboratorio no abre el /etc del host. |
RRQ TFTP de cualquier nombre relativo que el UID de VBox pueda abrir (claves del home, VirtualBox.xml, /etc del host, raíz de la unidad actual en Windows) | el mismo RTFileOpen | Inferido. La misma concatenación. Los archivos que el proceso no puede abrir permanecen cerrados (File not found). |
| Método | Privilegio |
|---|---|
| WRQ TFTP | Cerrado. Este servidor TFTP es solo RRQ. No hay manejador de escritura. |
| Sobrescritura / creación de archivos del host | Cerrado. RTFILE_O_READ de solo lectura. |
| Heap del proceso de la VM, VBoxSVC, otras VMs, kernel del host | Cerrado. Este residuo es una apertura de archivo de una ruta construida. |
| DoS de TFTP | Fuera del alcance. |
fEnableTFTP en false (constructor de NATEngine en Settings.cpp).VBoxNetSlirpNAT siempre establece tftp_path a <VirtualBox home>/TFTP cuando el home existe. Las RRQ permanecen bajo ese prefijo.../ y una / final siguen provocando "Access violation". Ese es el recorrido cerrado de CVE-2022-21394./work/tftp/boot.pxe en el laboratorio).Un host real que importa este appliance e inicia la VM permite al invitado leer cualquier ruta que el UID de VBox pueda abrir. El laboratorio es un arnés de origen de ese recorrido. VirtualBox no se arranca.
Fijé VirtualBox/virtualbox v7.2.20 (f2792cf44). Cacerías de NAT más OVF. La 7.2 cambió NAT al libslirp 4.9.3 incluido. El respeto de carpetas compartidas desde .ova ya se trata como un riesgo y se elimina. TFTP no estaba en esa lista.
Settings.cpp sigue leyendo enable-tftp de NAT y TFTP/@prefix en la importación de vbox:Machine:
elmMode.getAttributeValue("enable-tftp", nic.nat.fEnableTFTP);
// ...
pelmTFTP->getAttributeValue("prefix", nic.nat.strTFTPPrefix);
ApplianceImplImport.cpp:6147 sanea todo lo que recordaron:
config.sanitizeImportedSerialPorts();
config.sanitizeSharedFolderSettings();
config.sanitizeImportedNvramSettings();
if (!m->optListImport.contains(ImportOptions_KeepExtraData))
config.sanitizeImportedExtraData();
Esos cuatro cuerpos nunca nombran strTFTPPrefix ni fEnableTFTP.
Al iniciar, ConsoleImplConfigCommon.cpp:2286-2292 inserta TFTPPrefix solo cuando no está vacío e inserta siempre EnableTFTP. DrvNAT.cpp:1656-1665 establece EnableTFTP en true por defecto para las VM antiguas que omiten la clave, y luego:
rc = pDrvIns->pHlpR3->pfnCFGMQueryStringAllocDef(pCfg, "TFTPPrefix", &pszTmp, "");
slirpCfg.tftp_path = pszTmp;
slirp.c:698 es g_strdup. Vacío permanece no NULL. tftp.c:353-357 solo desactiva con NULL. 364-370 antepone el prefijo, /, el nombre del invitado. 398-407 rechaza ../. Luego RTFileOpen de la ruta construida.
Pistas falsas ya registradas: tratar el ../ del invitado como el residuo (CVE-2022-21394, aún rechazado); tratar las nuevas VM predeterminadas como afectadas; tratar el home/TFTP de NAT Network como este residuo; afirmar escrituras WRQ; afirmar host-kernel. Teatro: abrir /etc/passwd del host. El oráculo es un archivo testigo bajo /oracle.
python3 vbox-ovf-nat-tftp-prefix-Abraxas-Labs.py
o
cd lab
./run.sh