
VirtualBox 7.2.20 - Élevée - Locale - Lecture de fichier - Préfixe vide OVF NAT TFTP
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-ovf-nat-tftp-prefix
Classe : Lecture de fichier Portée : Locale (invité) après import UI:R
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle
L'import OVF vbox:Machine assainit les ExtraData, les dossiers partagés, le chemin NVRAM et le RawFile série. Il ne touche jamais à enable-tftp de NAT ni au @prefix de TFTP. libslirp ne désactive TFTP que lorsque tftp_prefix est NULL. Le g_strdup("") de DrvNAT reste non-NULL. Une RRQ invité etc/passwd avec un préfixe / ou vide devient /etc/passwd. Le ../ dans le nom invité est toujours rejeté.
Un TFTP NAT importé avec un préfixe vide ou / permet à l'invité de faire des RRQ sur des fichiers de l'hôte avec l'UID de VBox. Pas une écriture. Pas le noyau hôte. Pas un résidu de la vérification ../ fermée.
| ID | pas encore de CVE |
| Classe | Lecture de fichier (RRQ TFTP invité sur des chemins hôte) |
| Portée | Locale (invité) après import UI:R d'un OVF vbox:Machine, puis démarrage de la VM |
| CWE | CWE-22 résidu de la classe de préfixe de CVE-2022-21394 |
| CVSS | Élevé : 7.7 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N |
| Produit | Oracle VM VirtualBox OSS |
| Affecté | 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e) |
| Auth | aucune dans l'invité ; l'utilisateur hôte doit importer puis démarrer |
| Licence | GNU Affero GPL v3.0 |
| Labo | harnais source ; compose loopback ; VirtualBox n'est pas démarré |
Livrer un OVF/OVA vbox:Machine dont le blob NAT contient enable-tftp et un préfixe TFTP / ou vide, plus un disque invité qui émet des RRQ TFTP vers la passerelle NAT (10.0.2.2:69). L'utilisateur hôte importe (Fichier / Importer ou VBoxManage import) et démarre la VM. L'import efface les ExtraData, les dossiers partagés, le RawFile série et le chemin NVRAM. Les champs TFTP survivent. Au démarrage, ConsoleImplConfigCommon insère EnableTFTP. Un préfixe vide est omis du CFGM ; DrvNAT met alors TFTPPrefix par défaut à "" et le g_strdup. libslirp considère cela comme activé.
C'est l'ensemble complet des privilèges. Rien ici n'est une écriture hôte, une primitive de tas dans le processus VM, ou une évasion du noyau.
| Méthode | Cible | Privilège |
|---|---|---|
RRQ TFTP de oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS avec préfixe importé "" | libslirp tftp_handle_rrq puis RTFileOpen de préfixe + / + nom invité | Prouvé en labo. Le préfixe vide reste non-NULL. Le chemin construit est /oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS. L'ouverture en lecture seule a renvoyé les octets témoins. |
RRQ TFTP du même nom avec préfixe importé / | idem | Prouvé en labo. Le chemin construit est //oracle/..., identique POSIX à /oracle/.... Octets témoins renvoyés. |
Analogue chemin seul de la RRQ invité etc/passwd avec préfixe vide | "" + "/" + "etc/passwd" | Construction de chemin prouvée en labo. Le résultat est /etc/passwd. Le labo n'ouvre pas le /etc de l'hôte. |
RRQ TFTP de tout nom relatif que l'UID de VBox peut ouvrir (clés du home, VirtualBox.xml, /etc de l'hôte, racine du lecteur courant sous Windows) | même RTFileOpen | Déduit. Même concaténation. Les fichiers que le processus ne peut pas ouvrir restent fermés (File not found). |
| Méthode | Privilège |
|---|---|
| WRQ TFTP | Fermé. Ce serveur TFTP est en RRQ uniquement. Aucun gestionnaire d'écriture. |
| Écrasement / création de fichier hôte | Fermé. RTFILE_O_READ en lecture seule. |
| Tas du processus VM, VBoxSVC, autres VM, noyau hôte | Fermé. Ce résidu est une ouverture de fichier sur un chemin construit. |
| DoS TFTP | Hors périmètre. |
fEnableTFTP à false (constructeur NATEngine de Settings.cpp).VBoxNetSlirpNAT définit toujours tftp_path à <VirtualBox home>/TFTP lorsque le home existe. Les RRQ restent sous ce préfixe.../ et un / final déclenchent toujours « Access violation ». C'est le parcours fermé de CVE-2022-21394./work/tftp/boot.pxe dans le labo).Un véritable hôte qui importe cette appliance et démarre la VM donne à l'invité un accès en lecture à tout chemin que l'UID VBox peut ouvrir. Le labo est un harnais source de ce parcours. VirtualBox n'est pas démarré.
J'ai épinglé VirtualBox/virtualbox v7.2.20 (f2792cf44). Chasses NAT plus OVF. La 7.2 a fait passer NAT à libslirp 4.9.3 embarqué. L'honoration des dossiers partagés depuis .ova est déjà traitée comme un danger et supprimée. TFTP ne figurait pas sur cette liste.
Settings.cpp lit toujours enable-tftp de NAT et TFTP/@prefix lors de l'import vbox:Machine :
elmMode.getAttributeValue("enable-tftp", nic.nat.fEnableTFTP);
// ...
pelmTFTP->getAttributeValue("prefix", nic.nat.strTFTPPrefix);
ApplianceImplImport.cpp:6147 assainit tout ce dont ils se sont souvenus :
config.sanitizeImportedSerialPorts();
config.sanitizeSharedFolderSettings();
config.sanitizeImportedNvramSettings();
if (!m->optListImport.contains(ImportOptions_KeepExtraData))
config.sanitizeImportedExtraData();
Ces quatre corps ne mentionnent jamais strTFTPPrefix ni fEnableTFTP.
Au démarrage, ConsoleImplConfigCommon.cpp:2286-2292 insère TFTPPrefix uniquement lorsqu'il est non vide et insère toujours EnableTFTP. DrvNAT.cpp:1656-1665 définit EnableTFTP à true par défaut pour les anciennes VM qui omettent la clé, puis :
rc = pDrvIns->pHlpR3->pfnCFGMQueryStringAllocDef(pCfg, "TFTPPrefix", &pszTmp, "");
slirpCfg.tftp_path = pszTmp;
slirp.c:698 est g_strdup. Vide reste non-NULL. tftp.c:353-357 désactive uniquement sur NULL. 364-370 préfixe le préfixe, /, le nom d'invité. 398-407 rejette ../. Ensuite RTFileOpen du chemin construit.
Fausses pistes déjà consignées : traiter le ../ de l'invité comme le résidu (CVE-2022-21394, toujours rejeté) ; traiter les nouvelles VM par défaut comme affectées ; traiter le home/TFTP du réseau NAT comme ce résidu ; prétendre à des écritures WRQ ; prétendre au noyau hôte. Théâtre : ouvrir /etc/passwd de l'hôte. L'oracle est un fichier témoin sous /oracle.
python3 vbox-ovf-nat-tftp-prefix-Abraxas-Labs.py
ou
cd lab
./run.sh