
VFS pour Git ab95cf51 - Élevé - Local - LPE - répertoire courant de l'installateur gvfs.exe non qualifié
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-install-cwd
Classe : LPE Portée : Locale
VFS for Git master ab95cf51 (tag v2.0.26259.1) - Microsoft
Setup.iss PrepareToInstall appelle toujours ExecWithResult('gvfs.exe', 'service --list-mounted', '', ...) via {cmd} /S /C avec un WorkingDir vide. Cela hérite du répertoire depuis lequel l'administrateur a lancé SetupGVFS*.exe. cmd.exe recherche dans le CWD puis dans le PATH. UnmountRepos utilise le même nom non qualifié.
Le même fichier qualifie déjà les chemins sûrs. sc.exe est {sys}\SC.EXE. Le remontage post-installation est {app}\gvfs.exe. La première installation n'a pas encore de véritable gvfs.exe dans le PATH, donc une implantation à côté de l'installateur signé l'emporte.
| ID | pas encore de CVE |
| Classe | LPE (recherche dans le CWD de l'installateur élevé / exécution non qualifiée) |
| Portée | Locale (UI:R) |
| CWE | CWE-427, CWE-428 |
| CVSS | Élevé : 7.3 CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H |
| Produit | VFS for Git |
| Affecté | master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (tag v2.0.26259.1). Windows uniquement. |
| Auth | Locale. Implanter gvfs.exe dans le répertoire depuis lequel un administrateur lance SetupGVFS*.exe. |
| Licence | GNU Affero GPL v3.0 |
| Labo | 127.0.0.1 uniquement. how=gadget (pas de SetupGVFS*.exe natif). |
Frère de CVE-2021-47874 (binPath non entre guillemets), puits différent. sc.exe et le chemin de remontage sur ce pin sont déjà qualifiés.
Implanter un gvfs.exe bénin à côté de l'installateur signé. Lorsqu'un administrateur lance l'installation depuis ce dossier, PrepareToInstall exécute l'implant en tant qu'installateur élevé.
| Privilège | Méthode / puits | Ce que cela accorde | Reconnaissance / intégrité / disponibilité | Prouvé en labo ou déduit |
|---|---|---|---|---|
| Hériter du CWD de l'installateur | ExecWithResult WorkingDir vide (Setup.iss ~830) | La recherche commence dans le dossier de lancement | Intégrité de l'ordre de recherche | Prouvé en labo. Gadget working_dir="", recherche cwd-then-path. |
Résoudre gvfs.exe non qualifié depuis le CWD avant le PATH | cmd.exe /S /C ""gvfs.exe" service --list-mounted > ..." | L'implant l'emporte sur le PATH | Intégrité | Prouvé en labo. prepare-resolved=cwd-plant, résolu /lab/cwd/gvfs.exe. La copie du PATH n'a pas été atteinte. |
| S'exécuter en tant qu'installateur élevé | Propriétaire du fichier témoin = uid du gadget (substitut pour l'installation élevée) | Exécution de code équivalente à un administrateur | Intégrité | Prouvé en labo sur l'uid du gadget. IL administrateur natif non disponible sur cet hôte. |
| Même implant au démontage | Exec('gvfs.exe', 'service --unmount-all', '', ...) (Setup.iss ~544) | L'implant s'exécute à nouveau pendant le démontage | Intégrité | Prouvé en labo. unmount-resolved=cwd-plant. |
| Poursuivre l'installation après l'implant | L'implant se termine avec le code 0 et écrit uniquement un canari | L'installation se poursuit | Disponibilité de l'installation | Prouvé en labo. Le texte témoin est VFS-INSTALL-CWD-WITNESS. Aucune charge utile. |
Fermé sur ce reliquat : remontage {app}\gvfs.exe (remount-resolved=app, remount-plant=no). {sys}\SC.EXE entre guillemets (sc-resolved=sys). Recherche POSIX dans le PATH uniquement (unix-cwd-search=no). SetupGVFS*.exe / ProjFS en direct (cet hôte est macOS ; how=gadget). Exécution distante non authentifiée. ImagePath non entre guillemets CVE-2021-47874 (binPath déjà entre guillemets).
Mêmes reliquats de pin : vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-service-sid, vfs-hook-impersonate.
J'ai épinglé VFSForGit master ab95cf51 après la fusion du 2026-09-28. La liste d'exclusion est CVE-2021-47874. Setup.iss met déjà binPath entre guillemets et qualifie {sys}\SC.EXE et {app}\gvfs.exe. PrepareToInstall passe encore un gvfs.exe nu à cmd.exe.
Fausses pistes déjà consignées : re-déclarer CVE-2021-47874 ; traiter la recherche POSIX dans le PATH uniquement comme le bug Windows ; affirmer que le remontage est aussi non qualifié. Du théâtre. Windows natif était absent, donc le labo est un gadget de ExecWithResult plus la recherche cmd CWD-then-PATH.
python3 vfs-install-cwd-Abraxas-Labs.py
ou
cd lab
./run.sh
Gadget HTTP sur 127.0.0.1:19680. Témoin VFS-INSTALL-CWD-WITNESS. La dernière ligne utilise how=gadget.
SUCCESS vfs-install-cwd how=gadget prepare-resolved=cwd-plant prepare-witness=yes remount-resolved=app remount-plant=no unix-cwd-search=no VFS-INSTALL-CWD-WITNESS
ExpandConstant('{app}\gvfs.exe') lorsqu'il est présent, sinon ignorer la requête list-mounted lors de la première installation. Ne jamais passer un gvfs.exe nu à cmd.exe. Qualifier UnmountRepos de la même manière.
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3aSetup.iss PrepareToInstall / UnmountRepos / {sys}\SC.EXE / {app}\gvfs.exeImagePath non entre guillemetsGNU Affero GPL v3.0. Voir LICENSE. Labo en boucle locale uniquement. Aucune garantie.