
VirtualBox 7.2.20 - उच्च - स्थानीय - फ़ाइल पढ़ना - OVF NAT TFTP खाली उपसर्ग
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-ovf-nat-tftp-prefix
वर्ग: फ़ाइल पठन पहुँच: UI:R आयात के बाद स्थानीय (गेस्ट)
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle
vbox:Machine OVF आयात ExtraData, साझा फ़ोल्डर, NVRAM पथ, और सीरियल RawFile को सैनिटाइज़ करता है। यह कभी भी NAT enable-tftp या TFTP @prefix को नहीं छूता। libslirp TFTP को केवल तब अक्षम करता है जब tftp_prefix NULL हो। DrvNAT का g_strdup("") गैर-NULL ही रहता है। गेस्ट RRQ etc/passwd जिसका prefix / या खाली हो, वह /etc/passwd बन जाता है। गेस्ट नाम में ../ अभी भी अस्वीकृत होता है।
खाली या / prefix वाला आयातित NAT TFTP गेस्ट को VBox UID के रूप में होस्ट फ़ाइलों का RRQ करने देता है। यह लेखन नहीं है। यह होस्ट-कर्नेल नहीं है। यह बंद ../ जाँच का अवशेष नहीं है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | फ़ाइल पठन (होस्ट पथों का गेस्ट TFTP RRQ) |
| पहुँच | vbox:Machine OVF के UI:R आयात के बाद, फिर VM प्रारंभ के बाद स्थानीय (गेस्ट) |
| CWE | CVE-2022-21394 prefix वर्ग का अवशेष CWE-22 |
| CVSS | उच्च: 7.7 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N |
| उत्पाद | Oracle VM VirtualBox OSS |
| प्रभावित | 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e) |
| प्रमाणीकरण | गेस्ट में कोई नहीं; होस्ट उपयोगकर्ता को आयात करना होगा फिर प्रारंभ करना होगा |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | स्रोत हार्नेस; लूपबैक कंपोज़; VirtualBox बूट नहीं किया गया है |
एक vbox:Machine OVF/OVA भेजें जिसके NAT ब्लॉब में enable-tftp और TFTP prefix / या खाली हो, साथ ही एक गेस्ट डिस्क जो NAT गेटवे (10.0.2.2:69) को TFTP RRQ जारी करे। होस्ट उपयोगकर्ता आयात करता है (File / Import या VBoxManage import) और VM प्रारंभ करता है। आयात ExtraData, साझा फ़ोल्डर, सीरियल RawFile, और NVRAM पथ को साफ़ कर देता है। TFTP फ़ील्ड बच जाते हैं। प्रारंभ पर, ConsoleImplConfigCommon EnableTFTP डालता है। खाली prefix CFGM से छोड़ दिया जाता है; DrvNAT फिर TFTPPrefix को "" पर डिफ़ॉल्ट करता है और उसका g_strdup करता है। libslirp इसे सक्षम मानता है।
यही पूरा विशेषाधिकार सेट है। यहाँ कुछ भी होस्ट लेखन, VM-प्रक्रिया हीप प्रिमिटिव, या कर्नेल एस्केप नहीं है।
| विधि | सिंक | विशेषाधिकार |
|---|---|---|
आयातित prefix "" के साथ oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS का TFTP RRQ | libslirp tftp_handle_rrq फिर prefix + / + गेस्ट नाम का RTFileOpen | लैब-प्रमाणित। खाली prefix गैर-NULL रहता है। निर्मित पथ /oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS है। केवल-पठन ओपन ने witness बाइट्स लौटाए। |
आयातित prefix / के साथ उसी नाम का TFTP RRQ | वही | लैब-प्रमाणित। निर्मित पथ //oracle/... है, जो POSIX में /oracle/... के समान है। witness बाइट्स लौटाए गए। |
खाली prefix के साथ गेस्ट RRQ etc/passwd का केवल-पथ एनालॉग | "" + "/" + "etc/passwd" | लैब-प्रमाणित पथ निर्माण। परिणाम /etc/passwd है। लैब होस्ट /etc नहीं खोलता। |
VBox UID जो भी सापेक्ष नाम खोल सकता है उसका TFTP RRQ (होम कुंजियाँ, VirtualBox.xml, होस्ट /etc, Windows वर्तमान-ड्राइव रूट) | वही RTFileOpen | अनुमानित। वही संयोजन। जो फ़ाइलें प्रक्रिया नहीं खोल सकती वे बंद रहती हैं (File not found)। |
| विधि | विशेषाधिकार |
|---|---|
| TFTP WRQ | बंद। यह TFTP सर्वर केवल-RRQ है। कोई लेखन हैंडलर नहीं। |
| होस्ट फ़ाइल अधिलेखन / निर्माण | बंद। केवल-पठन RTFILE_O_READ। |
| VM-प्रक्रिया हीप, VBoxSVC, अन्य VM, होस्ट कर्नेल | बंद। यह अवशेष एक निर्मित पथ का फ़ाइल ओपन है। |
| TFTP DoS | मानक से बाहर। |
fEnableTFTP को false लिखता है (Settings.cpp NATEngine ctor)।VBoxNetSlirpNAT हमेशा tftp_path को <VirtualBox home>/TFTP पर सेट करता है जब home मौजूद हो। RRQ उसी प्रीफ़िक्स के अंतर्गत रहते हैं।../ और अंत में / अभी भी "Access violation" देता है। यह बंद CVE-2022-21394 वॉक है।/work/tftp/boot.pxe)।एक वास्तविक होस्ट जो इस एप्लायंस को आयात करता है और VM शुरू करता है, गेस्ट को उस किसी भी पथ का पढ़ने का अधिकार देता है जिसे VBox UID खोल सकता है। लैब उस वॉक का एक सोर्स हार्नेस है। VirtualBox बूट नहीं किया गया है।
मैंने VirtualBox/virtualbox v7.2.20 (f2792cf44) को पिन किया। NAT और OVF खोजें। 7.2 ने NAT को बंडल किए गए libslirp 4.9.3 पर स्विच किया। .ova से साझा-फ़ोल्डर का पालन पहले से ही एक जोखिम माना जाता है और हटा दिया जाता है। TFTP उस सूची में नहीं था।
Settings.cpp अभी भी vbox:Machine आयात पर NAT enable-tftp और TFTP/@prefix पढ़ता है:
elmMode.getAttributeValue("enable-tftp", nic.nat.fEnableTFTP);
// ...
pelmTFTP->getAttributeValue("prefix", nic.nat.strTFTPPrefix);
ApplianceImplImport.cpp:6147 वह सब कुछ सैनिटाइज़ करता है जो उन्हें याद था:
config.sanitizeImportedSerialPorts();
config.sanitizeSharedFolderSettings();
config.sanitizeImportedNvramSettings();
if (!m->optListImport.contains(ImportOptions_KeepExtraData))
config.sanitizeImportedExtraData();
वे चारों बॉडी कभी strTFTPPrefix या fEnableTFTP का नाम नहीं लेते।
स्टार्ट पर, ConsoleImplConfigCommon.cpp:2286-2292 TFTPPrefix को केवल तब सम्मिलित करता है जब वह खाली न हो और हमेशा EnableTFTP सम्मिलित करता है। DrvNAT.cpp:1656-1665 उन पुराने VMs के लिए EnableTFTP को डिफ़ॉल्ट रूप से true कर देता है जो कुंजी को छोड़ देते हैं, फिर:
rc = pDrvIns->pHlpR3->pfnCFGMQueryStringAllocDef(pCfg, "TFTPPrefix", &pszTmp, "");
slirpCfg.tftp_path = pszTmp;
slirp.c:698 में g_strdup है। खाली गैर-NULL रहता है। tftp.c:353-357 केवल NULL पर अक्षम करता है। 364-370 उपसर्ग, /, अतिथि नाम को आगे जोड़ता है। 398-407 ../ को अस्वीकार करता है। फिर निर्मित पथ का RTFileOpen।
पहले से दर्ज गलत मोड़: अतिथि ../ को अवशेष मानना (CVE-2022-21394, अभी भी अस्वीकृत); डिफ़ॉल्ट नए VM को प्रभावित मानना; NAT Network home/TFTP को यह अवशेष मानना; WRQ लेखन का दावा करना; होस्ट-कर्नेल का दावा करना। नाटक: होस्ट /etc/passwd खोलना। ओरेकल /oracle के अंतर्गत एक साक्षी फ़ाइल है।
python3 vbox-ovf-nat-tftp-prefix-Abraxas-Labs.py
या
cd lab
./run.sh
pin सैनिटाइज़र का स्रोत हार्नेस, DrvNAT खाली-स्ट्रिंग डिफ़ॉल्ट, g_strdup, और libslirp tftp_handle_rrq। Docker compose प्रोजेक्ट vbox-ovf-nat-tftp-prefix। केवल लूपबैक। VirtualBox बूट नहीं किया गया है। विटनेस VBOX-OVF-NAT-TFTP-PREFIX-WITNESS को /oracle/... पर स्थापित किया गया है। नियंत्रण PXE फ़ाइल /work/tftp/boot.pxe है। अंतिम पंक्ति:
SUCCESS vbox-ovf-nat-tftp-prefix sanitize-miss=yes null-disable=yes empty-prefix-read=yes slash-prefix-read=yes dotdot-reject=yes VBOX-OVF-NAT-TFTP-PREFIX-WITNESS