
VirtualBox 7.2.20 - Alta - Locale - Lettura di file - OVF NAT TFTP prefisso vuoto
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-ovf-nat-tftp-prefix
Classe: Lettura di file Portata: Locale (guest) dopo importazione UI:R
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle
L'importazione OVF vbox:Machine sanifica ExtraData, cartelle condivise, percorso NVRAM e serial RawFile. Non tocca mai NAT enable-tftp né TFTP @prefix. libslirp disabilita TFTP solo quando tftp_prefix è NULL. DrvNAT g_strdup("") resta non-NULL. La RRQ guest di etc/passwd con prefisso / o vuoto diventa /etc/passwd. Il ../ nel nome guest viene comunque rifiutato.
Un NAT TFTP importato con prefisso vuoto o / consente al guest di effettuare RRQ di file host con l'UID di VBox. Non è una scrittura. Non è host-kernel. Non è un residuo del controllo ../ chiuso.
| ID | nessuna CVE al momento |
| Classe | Lettura di file (RRQ TFTP guest di percorsi host) |
| Portata | Locale (guest) dopo importazione UI:R di un OVF vbox:Machine, poi avvio della VM |
| CWE | CWE-22 residuo della classe di prefisso di CVE-2022-21394 |
| CVSS | Alto: 7.7 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N |
| Prodotto | Oracle VM VirtualBox OSS |
| Affetto | 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e) |
| Auth | nessuna nel guest; l'utente host deve importare e poi avviare |
| Licenza | GNU Affero GPL v3.0 |
| Lab | harness sorgente; compose loopback; VirtualBox non viene avviato |
Distribuire un OVF/OVA vbox:Machine il cui blob NAT abbia enable-tftp e prefisso TFTP / o vuoto, più un disco guest che emetta RRQ TFTP verso il gateway NAT (10.0.2.2:69). L'utente host importa (File / Import o VBoxManage import) e avvia la VM. L'importazione cancella ExtraData, cartelle condivise, serial RawFile e percorso NVRAM. I campi TFTP sopravvivono. All'avvio, ConsoleImplConfigCommon inserisce EnableTFTP. Il prefisso vuoto viene omesso da CFGM; DrvNAT imposta quindi TFTPPrefix a "" per default e ne fa g_strdup. libslirp lo considera abilitato.
Questo è l'intero insieme di privilegi. Nulla qui è una scrittura host, una primitiva heap del processo VM o un'evasione dal kernel.
| Metodo | Sink | Privilegio |
|---|---|---|
RRQ TFTP di oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS con prefisso importato "" | libslirp tftp_handle_rrq poi RTFileOpen di prefisso + / + nome guest | Dimostrato in lab. Il prefisso vuoto resta non-NULL. Il percorso costruito è /oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS. L'apertura in sola lettura ha restituito i byte witness. |
RRQ TFTP dello stesso nome con prefisso importato / | stesso | Dimostrato in lab. Il percorso costruito è //oracle/..., POSIX-identico a /oracle/.... Byte witness restituiti. |
Analogo solo-percorso della RRQ guest etc/passwd con prefisso vuoto | "" + "/" + "etc/passwd" | Costruzione del percorso dimostrata in lab. Il risultato è /etc/passwd. Il lab non apre /etc dell'host. |
RRQ TFTP di qualsiasi nome relativo che l'UID di VBox può aprire (chiavi home, VirtualBox.xml, /etc dell'host, radice dell'unità corrente su Windows) | stesso RTFileOpen | Inferito. Stessa concatenazione. I file che il processo non può aprire restano chiusi (File not found). |
| Metodo | Privilegio |
|---|---|
| TFTP WRQ | Chiuso. Questo server TFTP è solo RRQ. Nessun handler di scrittura. |
| Sovrascrittura / creazione di file host | Chiuso. RTFILE_O_READ in sola lettura. |
| Heap del processo VM, VBoxSVC, altre VM, kernel host | Chiuso. Questo residuo è un'apertura di file di un percorso costruito. |
| DoS TFTP | Fuori ambito. |
fEnableTFTP false (costruttore NATEngine in Settings.cpp).VBoxNetSlirpNAT imposta sempre tftp_path a <VirtualBox home>/TFTP quando la home esiste. Le RRQ restano sotto quel prefisso.../ e una / finale producono comunque "Access violation". Si tratta del percorso chiuso di CVE-2022-21394./work/tftp/boot.pxe nel lab).Un host reale che importa questa appliance e avvia la VM consente al guest di leggere qualsiasi percorso che l'UID di VBox può aprire. Il lab è un harness sorgente di quel percorso. VirtualBox non viene avviato.
Ho fissato VirtualBox/virtualbox v7.2.20 (f2792cf44). Ricerche su NAT e OVF. La 7.2 ha spostato NAT sulla libslirp 4.9.3 inclusa. Il rispetto delle cartelle condivise da .ova è già considerato un rischio e viene rimosso. TFTP non era in quella lista.
Settings.cpp legge ancora enable-tftp di NAT e TFTP/@prefix all'importazione di vbox:Machine:
elmMode.getAttributeValue("enable-tftp", nic.nat.fEnableTFTP);
// ...
pelmTFTP->getAttributeValue("prefix", nic.nat.strTFTPPrefix);
ApplianceImplImport.cpp:6147 esegue la sanitizzazione di tutto ciò che hanno ricordato:
config.sanitizeImportedSerialPorts();
config.sanitizeSharedFolderSettings();
config.sanitizeImportedNvramSettings();
if (!m->optListImport.contains(ImportOptions_KeepExtraData))
config.sanitizeImportedExtraData();
Quei quattro corpi non menzionano mai strTFTPPrefix né fEnableTFTP.
All'avvio, ConsoleImplConfigCommon.cpp:2286-2292 inserisce TFTPPrefix solo quando non è vuoto e inserisce sempre EnableTFTP. DrvNAT.cpp:1656-1665 imposta EnableTFTP su true per impostazione predefinita per le vecchie VM che omettono la chiave, poi:
rc = pDrvIns->pHlpR3->pfnCFGMQueryStringAllocDef(pCfg, "TFTPPrefix", &pszTmp, "");
slirpCfg.tftp_path = pszTmp;
slirp.c:698 è g_strdup. Vuoto resta non-NULL. tftp.c:353-357 disabilita solo su NULL. 364-370 antepone il prefisso, /, il nome guest. 398-407 rifiuta ../. Poi RTFileOpen del percorso costruito.
Vicoli ciechi già registrati: trattare il ../ del guest come il residuo (CVE-2022-21394, ancora rifiutato); trattare le nuove VM predefinite come affette; trattare la home/TFTP della NAT Network come questo residuo; affermare scritture WRQ; affermare host-kernel. Teatro: aprire /etc/passwd dell'host. L'oracolo è un file testimone sotto /oracle.
python3 vbox-ovf-nat-tftp-prefix-Abraxas-Labs.py
o
cd lab
./run.sh