
VirtualBox 7.2.20 – Hoch – Lokal – Dateilesen – OVF NAT TFTP leeres Präfix
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-ovf-nat-tftp-prefix
Klasse: Dateilesen Reichweite: Lokal (Gast) nach UI:R-Import
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle
Der vbox:Machine-OVF-Import bereinigt ExtraData, freigegebene Ordner, NVRAM-Pfad und serielle RawFile. Er berührt niemals NAT enable-tftp oder TFTP @prefix. libslirp deaktiviert TFTP nur, wenn tftp_prefix NULL ist. DrvNAT g_strdup("") bleibt ungleich NULL. Ein Gast-RRQ auf etc/passwd mit Präfix / oder leer wird zu /etc/passwd. ../ im Gastnamen wird weiterhin abgelehnt.
Importiertes NAT-TFTP mit einem leeren oder /-Präfix erlaubt dem Gast, per RRQ Host-Dateien unter der VBox-UID zu lesen. Kein Schreiben. Kein Host-Kernel. Kein Überbleibsel der geschlossenen ../-Prüfung.
| ID | noch keine CVE |
| Klasse | Dateilesen (Gast-TFTP-RRQ von Host-Pfaden) |
| Reichweite | Lokal (Gast) nach UI:R-Import einer vbox:Machine-OVF, dann VM-Start |
| CWE | CWE-22 Überbleibsel der Präfix-Klasse von CVE-2022-21394 |
| CVSS | Hoch: 7.7 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N |
| Produkt | Oracle VM VirtualBox OSS |
| Betroffen | 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e) |
| Auth | keine im Gast; der Host-Benutzer muss importieren und dann starten |
| Lizenz | GNU Affero GPL v3.0 |
| Labor | Source-Harness; Loopback-Compose; VirtualBox wird nicht gebootet |
Eine vbox:Machine-OVF/OVA ausliefern, deren NAT-Blob enable-tftp und ein TFTP-Präfix / oder leer enthält, zusammen mit einer Gast-Festplatte, die TFTP-RRQ an das NAT-Gateway (10.0.2.2:69) sendet. Der Host-Benutzer importiert (Datei / Importieren oder VBoxManage import) und startet die VM. Der Import leert ExtraData, freigegebene Ordner, serielle RawFile und NVRAM-Pfad. Die TFTP-Felder überleben. Beim Start fügt ConsoleImplConfigCommon EnableTFTP ein. Ein leeres Präfix wird aus der CFGM weggelassen; DrvNAT setzt dann TFTPPrefix standardmäßig auf "" und ruft g_strdup darauf auf. libslirp behandelt das als aktiviert.
Das ist die vollständige Berechtigungsmenge. Nichts hiervon ist ein Host-Schreibzugriff, ein Heap-Primitiv im VM-Prozess oder eine Kernel-Escape.
| Methode | Senke | Berechtigung |
|---|---|---|
TFTP-RRQ auf oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS mit importiertem Präfix "" | libslirp tftp_handle_rrq, dann RTFileOpen von Präfix + / + Gastname | Im Labor nachgewiesen. Ein leeres Präfix bleibt ungleich NULL. Der gebildete Pfad ist /oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS. Ein schreibgeschütztes Öffnen lieferte die Witness-Bytes. |
TFTP-RRQ desselben Namens mit importiertem Präfix / | dieselbe | Im Labor nachgewiesen. Der gebildete Pfad ist //oracle/..., POSIX-gleich zu /oracle/.... Witness-Bytes geliefert. |
Pfad-Analogon des Gast-RRQ etc/passwd mit leerem Präfix | "" + "/" + "etc/passwd" | Im Labor nachgewiesener Pfadaufbau. Das Ergebnis ist /etc/passwd. Das Labor öffnet das Host-/etc nicht. |
TFTP-RRQ eines beliebigen relativen Namens, den die VBox-UID öffnen kann (Home-Schlüssel, VirtualBox.xml, Host-/etc, Windows-Laufwerkswurzel) | dasselbe RTFileOpen | Abgeleitet. Dieselbe Verkettung. Dateien, die der Prozess nicht öffnen kann, bleiben geschlossen (File not found). |
| Methode | Berechtigung |
|---|---|
| TFTP-WRQ | Geschlossen. Dieser TFTP-Server ist RRQ-only. Kein Write-Handler. |
| Überschreiben / Erstellen von Host-Dateien | Geschlossen. Schreibgeschütztes RTFILE_O_READ. |
| Heap des VM-Prozesses, VBoxSVC, andere VMs, Host-Kernel | Geschlossen. Dieses Überbleibsel ist ein Dateiöffnen eines gebildeten Pfads. |
| TFTP-DoS | Außerhalb der Messlatte. |
fEnableTFTP false (Settings.cpp NATEngine ctor).VBoxNetSlirpNAT setzt tftp_path immer auf <VirtualBox home>/TFTP, wenn das Home-Verzeichnis existiert. RRQs bleiben unter diesem Präfix.../ und ein abschließendes / führen weiterhin zu "Access violation". Das ist der geschlossene CVE-2022-21394-Walk./work/tftp/boot.pxe im Lab).Ein echter Host, der dieses Appliance importiert und die VM startet, ermöglicht dem Gast das Lesen jedes Pfads, den die VBox-UID öffnen kann. Das Lab ist ein Source-Harness dieses Walks. VirtualBox wird nicht gebootet.
Ich habe VirtualBox/virtualbox v7.2.20 (f2792cf44) gepinnt. NAT- plus OVF-Untersuchungen. 7.2 stellte NAT auf das gebündelte libslirp 4.9.3 um. Das Übernehmen von Shared Folders aus .ova wird bereits als Gefahr behandelt und entfernt. TFTP stand nicht auf dieser Liste.
Settings.cpp liest beim vbox:Machine-Import weiterhin NAT enable-tftp und TFTP/@prefix:
elmMode.getAttributeValue("enable-tftp", nic.nat.fEnableTFTP);
// ...
pelmTFTP->getAttributeValue("prefix", nic.nat.strTFTPPrefix);
ApplianceImplImport.cpp:6147 bereinigt alles, woran sie sich erinnert haben:
config.sanitizeImportedSerialPorts();
config.sanitizeSharedFolderSettings();
config.sanitizeImportedNvramSettings();
if (!m->optListImport.contains(ImportOptions_KeepExtraData))
config.sanitizeImportedExtraData();
Diese vier Stellen nennen niemals strTFTPPrefix oder fEnableTFTP.
Beim Start fügt ConsoleImplConfigCommon.cpp:2286-2292 TFTPPrefix nur ein, wenn es nicht leer ist, und fügt immer EnableTFTP ein. DrvNAT.cpp:1656-1665 setzt EnableTFTP standardmäßig auf true für alte VMs, die den Schlüssel weglassen, dann:
rc = pDrvIns->pHlpR3->pfnCFGMQueryStringAllocDef(pCfg, "TFTPPrefix", &pszTmp, "");
slirpCfg.tftp_path = pszTmp;
slirp.c:698 ist g_strdup. Leer bleibt ungleich NULL. tftp.c:353-357 deaktiviert nur bei NULL. 364-370 stellt Präfix, /, Gastnamen voran. 398-407 lehnt ../ ab. Dann RTFileOpen des erzeugten Pfads.
Bereits festgehaltene Fehlannahmen: Gast-../ als das Übriggebliebene zu behandeln (CVE-2022-21394, weiterhin abgelehnt); Standard-Neu-VMs als betroffen zu behandeln; NAT-Network-Home/TFTP als dieses Übriggebliebene zu behandeln; WRQ-Schreibvorgänge zu behaupten; Host-Kernel zu behaupten. Theater: Öffnen von Host-/etc/passwd. Das Orakel ist eine Zeugendatei unter /oracle.
python3 vbox-ovf-nat-tftp-prefix-Abraxas-Labs.py
oder
cd lab
./run.sh