
VFS for Git ab95cf51 - उच्च - स्थानीय - विशेषाधिकार अवशेष - hook CreateFileW SecurityImpersonation
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-hook-impersonate
वर्ग: विशेषाधिकार अवशेष पहुँच: स्थानीय
VFS for Git मास्टर ab95cf51 (टैग v2.0.26259.1) - Microsoft
नेटिव git हुक (read-object, virtual-filesystem, post-index-changed) प्रति-एनलिस्टमेंट माउंट पाइप को CreateFileW और dwFlagsAndAttributes = 0 के साथ खोलते हैं। यह SECURITY_SQOS_PRESENT को छोड़ देता है, इसलिए Windows क्लाइंट को डिफ़ॉल्ट रूप से SecurityImpersonation पर सेट कर देता है। वही पाइप ACL जिसका उपयोग अवशेष #2 करता है, BUILTIN\Users को ReadWrite | CreateNewInstance प्रदान करता है।
एक दूसरा स्थानीय उपयोगकर्ता \\.\pipe\GVFS_<ENLISTMENT> को अतिरिक्त-इंस्टेंस या स्क्वाट कर सकता है, ImpersonateNamedPipeClient कर सकता है, और पीड़ित के रूप में लिख सकता है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | विशेषाधिकार अवशेष (नामित-पाइप प्रतिरूपण) |
| पहुँच | स्थानीय |
| CWE | CWE-284, CWE-300 |
| CVSS | उच्च: 7.1 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| उत्पाद | VFS for Git |
| प्रभावित | मास्टर ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (वर्तमान बनाम रिलीज़ v2.0.26259.1 भी)। केवल Windows। |
| प्रमाणीकरण | स्थानीय। पीड़ित के पास GVFS एनलिस्टमेंट है। हमलावर कोई भी BUILTIN\Users प्रिंसिपल है। पीड़ित बाद में git चलाता है। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1। how=gadget (कोई लाइव Windows VM / इंस्टॉल किया गया VFS for Git नहीं)। |
यह स्थानीय है। यह SYSTEM नहीं है। अवशेष #4 में Automount एक अलग पाइप है (GVFS.Service.pipe)। इसी माउंट पाइप पर Dehydrate/unmount अवशेष #2 है।
पीड़ित के पास GVFS एनलिस्टमेंट है। हमलावर कोई भी BUILTIN\Users प्रिंसिपल है। पीड़ित बाद में git चलाता है (status, checkout, कुछ भी जो VFS हुक को ट्रिगर करता है)।
| विशेषाधिकार | विधि / सिंक | यह क्या प्रदान करता है | रेकॉन / अखंडता / उपलब्धता | लैब-प्रमाणित या अनुमानित |
|---|---|---|---|---|
| पीड़ित का प्रतिरूपण करें और उनके प्रोफ़ाइल में लिखें | अतिरिक्त-इंस्टेंस / स्क्वाट \\.\pipe\GVFS_C_\REPOS\FOO; हुक CreateFileW flags=0; ImpersonateNamedPipeClient; %USERPROFILE%\VFS-HOOK-IMPERSONATE-WITNESS बनाएँ | पीड़ित UID के रूप में लिखें | अखंडता | गैजेट पर लैब-प्रमाणित। Witness का स्वामी पीड़ित uid है। डिफ़ॉल्ट फ़्लैग SecurityImpersonation हैं। हमलावर uid प्रतिरूपण के बिना उस होम में नहीं लिख सकता |
| स्क्वाट के बाद git को काम करते रहें | MPL|1 को S|\x03 का उत्तर दें ताकि GVFS.VirtualFileSystemHook हैंग न हो | Git जारी रहता है | पीड़ित git की उपलब्धता | लैब-प्रमाणित। vuln और patched दोनों पथों पर हुक reply_ok |
| एनलिस्टमेंट रूट से पाइप नाम का अनुमान लगाएँ | GetGVFSPipeName CWD से .gvfs तक चलता है, CharUpper, : -> _, प्रीफ़िक्स \\.\pipe\GVFS_ | अनुमानित IPC नाम | रेकॉन | लैब-प्रमाणित। C:\Repos\Foo\src -> \\.\pipe\GVFS_C_\REPOS\FOO |
| लाइव इंस्टेंस जीते बिना पाइप को रीटार्गेट करें | एक ट्रैक किया गया src\.gvfs डायरेक्टरी प्लांट करें ताकि walk-up एक अलग नाम बाइंड करे | माउंट से रेस किए बिना स्क्वाटिंग | अखंडता | common.windows.cpp walk-up से अनुमानित। लैब ने वास्तविक एनलिस्टमेंट .gvfs का उपयोग किया |
MPL के साथ-साथ DLO / PICN का उत्तर दें | वही पाइप, ReadObjectHook / PostIndexChangedHook | ऑब्जेक्ट के बारे में झूठ बोलें / skip-worktree | अखंडता | अनुमानित। लैब ने केवल MPL|1 भेजा |
दो-बाइट S\x03 से हुक को क्रैश करें | VirtualFileSystemHook messageLength -= 2 फिर -= 1 अंडरफ़्लो होता है और ~4GiB fwrite करता है | क्रैश / OOB रीड | उपलब्धता | main.cpp 69-90 से अनुमानित। ओरेकल नहीं। उस क्रैश को शिप न करें |
यहाँ बंद: SYSTEM (माउंट एनलिस्टमेंट उपयोगकर्ता है)। रिमोट अनऑथेंटिकेटेड RCE। लाइव Windows VM / इंस्टॉल किया गया VFS for Git (यह लैब कॉपी किए गए फ़ंक्शन्स का एक गैजेट है)।
समान पिन अवशेष: vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-service-sid, vfs-install-cwd।
मैंने 2026-09-28 मर्ज के बाद VFSForGit मास्टर ab95cf51 को पिन किया। नेटिव हुक CreateFileW को flags 0 के साथ कॉल करते हैं। Windows तब डिफ़ॉल्ट रूप से SecurityImpersonation पर चला जाता है। माउंट पाइप पहले से ही Users को अतिरिक्त-इंस्टेंस की अनुमति देता है। यही अवशेष है।
पहले से दर्ज गलत मोड़: इसे अवशेष #2 dehydrate मानना (समान ACL, अलग सिंक: टोकन, MoveDirectory नहीं); SYSTEM का दावा करना; 4GiB अंडरफ़्लो को ओरेकल के रूप में शिप करना। नाटक। नेटिव Windows अनुपस्थित था, इसलिए लैब उन फ़ंक्शन्स का एक गैजेट है। Unix सॉकेट नामित पाइप के विकल्प के रूप में खड़े हैं।
python3 vfs-hook-impersonate-Abraxas-Labs.py
या
cd lab
./run.sh
127.0.0.1:19670 पर गैजेट HTTP। GetGVFSPipeName, CreatePipeToGVFS फ़्लैग, Users CreateNewInstance ACL, और MPL|1 / S| हुक प्रोटोकॉल की प्रतिलिपि बनाता है। SQOS identification वाला एक पैच किया गया क्लाइंट witness नहीं लिखता। अंतिम पंक्ति how=gadget का उपयोग करती है।
SUCCESS vfs-hook-impersonate how=gadget createfile-flags=0 impersonation=SecurityImpersonation extra-instance=yes owner=victim patched-sqos-ident-no-write=yes VFS-HOOK-IMPERSONATE-WITNESS
हुक CreateFileW पर SECURITY_SQOS_PRESENT | SECURITY_IDENTIFICATION पास करें। CreatePipeByName को एनलिस्टमेंट स्वामी SID और LocalSystem तक सीमित करें। Users के लिए CreateNewInstance हटा दें। हुक उत्तर लंबाई की बाउंड-जाँच करें।
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3acommon.windows.cpp CreatePipeToGVFSWindowsPlatform.cs CreatePipeByNameGNU Affero GPL v3.0। LICENSE देखें। केवल लूपबैक लैब। कोई वारंटी नहीं।