
VFS for Git ab95cf51 - عالي - محلي - بقايا صلاحيات - hook CreateFileW SecurityImpersonation
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-hook-impersonate
الفئة: صلاحية متبقية الوصول: محلي
VFS for Git master ab95cf51 (tag v2.0.26259.1) - Microsoft
خطافات git الأصلية (read-object، virtual-filesystem، post-index-changed) تفتح أنبوب التركيب الخاص بكل تجنيد باستخدام CreateFileW و dwFlagsAndAttributes = 0. هذا يحذف SECURITY_SQOS_PRESENT، لذا يقوم Windows بضبط العميل افتراضيًا على SecurityImpersonation. نفس قائمة التحكم بالوصول (ACL) للأنبوب التي يستخدمها leftover #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 |
| المتأثر | master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (أيضًا الحالي مقابل الإصدار v2.0.26259.1). Windows فقط. |
| المصادقة | محلي. الضحية لديها تجنيد GVFS. المهاجم هو أي أصل BUILTIN\Users. الضحية تشغّل git لاحقًا. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط. how=gadget (لا يوجد جهاز Windows افتراضي مباشر / VFS for Git مثبّت). |
هذا محلي. ليس SYSTEM. Automount في leftover #4 هو أنبوب مختلف (GVFS.Service.pipe). Dehydrate/unmount على نفس أنبوب التركيب هذا هو leftover #2.
الضحية لديها تجنيد GVFS. المهاجم هو أي أصل BUILTIN\Users. الضحية تشغّل git لاحقًا (status، checkout، أي شيء يُفعّل خطافات VFS).
| الصلاحية | الطريقة / الهدف | ما تمنحه | الاستطلاع / السلامة / التوفر | مُثبت مختبريًا أو مُستنتج |
|---|---|---|---|---|
| انتحال هوية الضحية والكتابة في ملفهم الشخصي | نسخة إضافية / الاستيلاء على \\.\pipe\GVFS_C_\REPOS\FOO؛ خطاف CreateFileW flags=0؛ ImpersonateNamedPipeClient؛ إنشاء %USERPROFILE%\VFS-HOOK-IMPERSONATE-WITNESS | الكتابة بمعرّف الضحية (UID) | السلامة | مُثبت مختبريًا على gadget. مالك الشاهد هو uid الضحية. الأعلام الافتراضية هي SecurityImpersonation. لا يمكن لـ uid المهاجم الكتابة في ذلك المنزل دون انتحال الهوية |
| إبقاء git يعمل بعد الاستيلاء | الرد بـ S|\x03 على MPL|1 حتى لا يتعلّق GVFS.VirtualFileSystemHook | يستمر git | توفر git الخاص بالضحية | مُثبت مختبريًا. reply_ok للخطاف على كلا المسارين المصاب والمُرقّع |
| تخمين اسم الأنبوب من جذر التجنيد | GetGVFSPipeName يمشي في CWD إلى .gvfs، CharUpper، : -> _، البادئة \\.\pipe\GVFS_ | اسم IPC قابل للتخمين | الاستطلاع | مُثبت مختبريًا. C:\Repos\Foo\src -> \\.\pipe\GVFS_C_\REPOS\FOO |
| إعادة توجيه الأنبوب دون الفوز بالنسخة الحية | زرع دليل src\.gvfs متتبَّع بحيث يربط المشي لأعلى اسمًا مختلفًا | الاستيلاء دون التسابق مع التركيب | السلامة | مُستنتج من المشي لأعلى في common.windows.cpp. استخدم المختبر .gvfs الخاص بالتجنيد الحقيقي |
الرد على DLO / PICN بالإضافة إلى MPL | نفس الأنبوب، ReadObjectHook / PostIndexChangedHook | الكذب بشأن الكائنات / skip-worktree | السلامة | مُستنتج. أرسل المختبر MPL|1 فقط |
إسقاط الخطاف بـ S\x03 من بايتين | VirtualFileSystemHook messageLength -= 2 ثم -= 1 يحدث underflow وfwrites ~4GiB | إسقاط / قراءة خارج الحدود | التوفر | مُستنتج من main.cpp 69-90. ليس الـ oracle. لا تُطلق ذلك الانهيار |
مُغلق هنا: SYSTEM (التركيب هو مستخدم التجنيد). RCE عن بُعد غير مُصادَق. جهاز Windows افتراضي مباشر / VFS for Git مثبّت (هذا المختبر هو gadget للدوال المنسوخة).
نفس leftovers التثبيت: vfs-quote-breakout، vfs-mount-dehydrate، vfs-clone-acl، vfs-service-sid، vfs-install-cwd.
ثبّتت VFSForGit master ab95cf51 بعد دمج 2026-09-28. الخطافات الأصلية CreateFileW بأعلام 0. ثم يقوم Windows افتراضيًا بـ SecurityImpersonation. أنبوب التركيب يسمح بالفعل لـ Users بنسخة إضافية. هذا هو leftover.
المنعطفات الخاطئة المسجّلة بالفعل: معاملة هذا كـ leftover #2 dehydrate (نفس ACL، هدف مختلف: token، وليس MoveDirectory)؛ ادعاء SYSTEM؛ إطلاق underflow بحجم 4GiB كـ oracle. مسرحية. كان Windows الأصلي مفقودًا، لذا المختبر هو gadget لتلك الدوال. مقابس Unix تحل محل الأنابيب المسمّاة.
python3 vfs-hook-impersonate-Abraxas-Labs.py
أو
cd lab
./run.sh
Gadget HTTP على 127.0.0.1:19670. ينسخ GetGVFSPipeName، أعلام CreatePipeToGVFS، ACL CreateNewInstance الخاص بـ Users، وبروتوكول الخطاف MPL|1 / S|. عميل مُرقّع بـ SQOS identification لا يكتب الشاهد. السطر الأخير يستخدم 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. أزل CreateNewInstance لـ Users. افحص أطوال رد الخطاف بحدود.
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3acommon.windows.cpp CreatePipeToGVFSWindowsPlatform.cs CreatePipeByNameGNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. لا ضمان.