
VFS for Git ab95cf51 - عالي - عن بُعد - RCE - core.virtualfilesystem التفاف بعلامة اقتباس مفردة
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-quote-breakout
الفئة: RCE الوصول: عن بُعد
VFS for Git master ab95cf51 (الوسم v2.0.26259.1) - Microsoft
CloneVerb.GetCloneRoot يأخذ آخر مقطع من مسار URL كاسم مجلد التجنيد الافتراضي ولا يزيل علامة الاقتباس. ثم RequiredGitConfig يكتب core.virtualfilesystem كمسار خطاف مُغلَّف بعلامة اقتباس مفردة بشكل ساذج. يقوم microsoft/git بتشغيل تلك القيمة مع use_shell=1. حتى تعليق المنتج يذكر bash.
URL استنساخ يكون مقطعه الأخير pwn';witness;' يصبح 'C:/temp/pwn';witness;'/src/.git/hooks/GVFS.VirtualFileSystemHook.exe'. يرى bash ثلاثة أوامر. الأمر الأوسط يعمل بصلاحيات المستخدم الذي قام بالاستنساخ.
| المعرّف | لا يوجد CVE بعد |
| الفئة | RCE (تغليف بعلامة اقتباس مفردة لـ core.virtualfilesystem) |
| الوصول | عن بُعد (UI:R استنساخ URL مهاجم، أو git worktree add محلي تحت مجلد مُصمَّم) |
| CWE | CWE-78، CWE-116 |
| CVSS | مرتفع: 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| المنتج | VFS for Git (يحتاج microsoft/git) |
| المتأثر | master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (الوسم v2.0.26259.1). Windows فقط. |
| المصادقة | الضحية يستنسخ URL مهاجم (أو git worktree add تحت مجلد مُصمَّم) |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط. how=gadget (بدون Windows VM / ProjFS حي). |
تنفيذ كود على المضيف بصلاحيات المستخدم الذي استنسخ أو شغّل git. ليس SYSTEM. ليس RCE بدون مصادقة يتجاوز "الضحية يستنسخ هذا URL".
| الصلاحية | الطريقة / نقطة الوصول | ما تمنحه | الاستطلاع / السلامة / التوفر | مُثبت مختبرياً أو مُستنتج |
|---|---|---|---|---|
| اختيار اسم مجلد التجنيد | آخر مقطع مسار من gvfs clone <url> بدون وجهة (CloneVerb.GetCloneRoot) | اسم المجلد يختاره المهاجم. Windows يسمح بـ ' و ; | سلامة مسار الوجهة | مُثبت مختبرياً على مساعد الوجهة المنسوخ. URL .../pwn';witness;' يصبح C:\temp\pwn';witness;' |
الخروج من core.virtualfilesystem | تغليف RequiredGitConfig "'" + ConvertPathToGitFormat(hook) + "'" | قيمة الإعداد هي ثلاث رموز shell، وليس مساراً واحداً | سلامة إعداد git | مُثبت مختبرياً. التغليف هو 'C:/temp/pwn';witness;'/src/.git/hooks/GVFS.VirtualFileSystemHook.exe' |
| تشغيل أمر shell إضافي بصلاحيات المستنسخ | microsoft/git virtualfilesystem.c use_shell=1 (bash -c لقيمة الإعداد) | أمر مضيف عشوائي بصلاحيات UID المستنسخ | سلامة / توفر جلسة المستنسخ | مُثبت مختبرياً على الأداة. witness كتب VFS-VFS-QUOTE-WITNESS. الرمزان الأول والثالث مسارات مفقودة (rc 127) |
| نفس التغليف على worktree | Program.Worktree.cs -c core.virtualfilesystem="'<path>'" | نفس الخروج بدون URL استنساخ | السلامة | مُستنتج من كود المصدر المثبّت. لم يُنفَّذ |
التكرار عند git status / mount لاحقاً | InProcessMount.TrySetRequiredGitConfigSettings يعيد تطبيق التغليف | git اللاحق أيضاً يشغّل القيمة العدائية عبر shell | السلامة | مُستنتج. لم يُنفَّذ |
مغلق على هذه البقايا: ProjFS حي / Microsoft git / gvfs clone (هذا المضيف macOS؛ how=gadget). SYSTEM. RCE بدون مصادقة يتجاوز "الضحية يستنسخ هذا URL". وجهة لا يحتوي اسمها على '، ونفس المسار العدائي مُغلَّف بـ '\''، لا يشغّلان witness.
نفس بقايا التثبيت: vfs-mount-dehydrate، vfs-clone-acl، vfs-service-sid، vfs-hook-impersonate، vfs-install-cwd.
ثبّتُ VFS for Git master ab95cf51 بعد دمج 2026-09-28. توصي Microsoft بـ Scalar للنشر الجديد. الشجرة لا تزال موسومة v2.0.26259.1. قائمة التخطي هي CVE-2021-47874 (binPath مُغلَّف على هذا التثبيت). عشر عمليات بحث. ProjFS hydration، محللات GPRE، URLs ذاكرة التخزين المؤقت، FastFetch، و gvfs upgrade عادت فارغة في هذا المعيار.
ثم جلست على RequiredGitConfig. التعليق يوثّق bash. التغليف لا يهرّب '. CloneVerb يستخدم آخر مقطع URL كوجهة. تلك هي البقايا.
المنعطفات الخاطئة المسجلة مسبقاً: اعتبار وجهة بدون اقتباس هي العلّة (ليست كذلك)؛ ادعاء SYSTEM؛ reverse shell. مسرح. كان Windows الأصلي مفقوداً، لذا المختبر هو أداة لذلك التغليف بالإضافة إلى bash -c.
python3 vfs-quote-breakout-Abraxas-Labs.py
أو
cd lab
./run.sh
أداة HTTP على 127.0.0.1:19630. تنسخ مساعدي التغليف والوجهة، ثم /bin/bash -c مع PATH محدود بمساعد witness يكتب الـ oracle. لم يكن Windows VM الأصلي متاحاً. السطر الأخير يستخدم how=gadget.
SUCCESS vfs-quote-breakout how=gadget who=cloner naive-breakout=yes escaped-hold=yes VFS-VFS-QUOTE-WITNESS
هرّب ' كـ '\'' قبل التغليف، أو توقف عن استخدام use_shell ومرّر الخطاف كـ argv[0]. ارفض مسارات الاستنساخ و worktree التي تحتوي على '.
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (الوسم v2.0.26259.1)CloneVerb.cs الوجهة الافتراضيةRequiredGitConfig.cs التغليف الذي لا يهرّب 'virtualfilesystem.c use_shell=1ImagePath غير مُغلَّفGNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. بدون ضمان.