Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
vfs-hook-impersonate — VFS pour Git ab95cf51 - Élevé - Local - Privilège résiduel - hook CreateFileW SecurityImpersonation | Kitploit
Outils/GitHubGitHub/abraxas/vfs-hook-impersonate
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationTests d'IntrusionArticles et RechercheRed TeamingLabs et Pratique
GitHubabraxas/vfs-hook-impersonate

vfs-hook-impersonate

VFS pour Git ab95cf51 - Élevé - Local - Privilège résiduel - hook CreateFileW SecurityImpersonation

Voir le dépôt
5il y a 4 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Abraxas Labs - vfs-hook-impersonate

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vfs-hook-impersonate

vfs-hook-impersonate

Classe : Reliquat de privilège Portée : Locale

VFS for Git master ab95cf51 (tag v2.0.26259.1) - Microsoft

Les hooks git natifs (read-object, virtual-filesystem, post-index-changed) ouvrent le pipe de montage par enlistment avec CreateFileW et dwFlagsAndAttributes = 0. Cela omet SECURITY_SQOS_PRESENT, donc Windows applique par défaut SecurityImpersonation au client. La même ACL de pipe qu'utilise le reliquat #2 accorde à BUILTIN\Users ReadWrite | CreateNewInstance.

Un second utilisateur local peut créer une instance supplémentaire ou squatter \\.\pipe\GVFS_<ENLISTMENT>, ImpersonateNamedPipeClient, et écrire en tant que la victime.

IDpas encore de CVE
ClasseReliquat de privilège (usurpation de named-pipe)
PortéeLocale
CWECWE-284, CWE-300
CVSSÉlevé : 7.1 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProduitVFS for Git
Affectémaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (également la version actuelle vs release v2.0.26259.1). Windows uniquement.
AuthLocal. La victime possède un enlistment GVFS. L'attaquant est n'importe quel principal BUILTIN\Users. La victime exécute git plus tard.
LicenceGNU Affero GPL v3.0
Lab127.0.0.1 uniquement. how=gadget (pas de VM Windows live / VFS for Git installé).

Ceci est local. Ce n'est pas SYSTEM. L'automount du reliquat #4 est un pipe différent (GVFS.Service.pipe). Dehydrate/unmount sur ce même pipe de montage est le reliquat #2.

Ce qu'un attaquant peut faire

La victime possède un enlistment GVFS. L'attaquant est n'importe quel principal BUILTIN\Users. La victime exécute git plus tard (status, checkout, tout ce qui déclenche les hooks VFS).

PrivilègeMéthode / sinkCe que cela accordeRecon / intégrité / disponibilitéProuvé en lab ou déduit
Usurper la victime et écrire dans son profilInstance supplémentaire / squat \\.\pipe\GVFS_C_\REPOS\FOO ; hook CreateFileW flags=0 ; ImpersonateNamedPipeClient ; créer %USERPROFILE%\VFS-HOOK-IMPERSONATE-WITNESSÉcrire en tant que l'UID de la victimeIntégritéProuvé en lab sur un gadget. Le propriétaire du witness est l'uid de la victime. Les flags par défaut sont SecurityImpersonation. L'uid de l'attaquant ne peut pas écrire dans ce home sans usurpation
Maintenir git fonctionnel après le squatRépondre S|\x03 à MPL|1 pour que GVFS.VirtualFileSystemHook ne bloque pasGit continueDisponibilité du git de la victimeProuvé en lab. Hook reply_ok sur les chemins vulnérable et patché
Deviner le nom du pipe depuis la racine de l'enlistmentGetGVFSPipeName remonte le CWD jusqu'à .gvfs, CharUpper, : -> _, préfixe \\.\pipe\GVFS_Nom IPC devinableReconProuvé en lab. C:\Repos\Foo\src -> \\.\pipe\GVFS_C_\REPOS\FOO
Recibler le pipe sans gagner l'instance livePlacer un répertoire src\.gvfs suivi pour que la remontée lie un nom différentSquatter sans courir après le montageIntégritéDéduit de la remontée dans common.windows.cpp. Le lab a utilisé le vrai .gvfs de l'enlistment
Répondre à DLO / PICN ainsi qu'à MPLMême pipe, ReadObjectHook / PostIndexChangedHookMentir sur les objets / skip-worktreeIntégritéDéduit. Le lab n'a envoyé que MPL|1
Faire planter le hook avec un S\x03 de deux octetsVirtualFileSystemHook messageLength -= 2 puis -= 1 sous-déborde et fwrite ~4GiBCrash / lecture hors limitesDisponibilitéDéduit de main.cpp 69-90. Ce n'est pas l'oracle. Ne pas livrer ce crash

Exclus ici : SYSTEM (le montage est l'utilisateur de l'enlistment). RCE distant non authentifié. VM Windows live / VFS for Git installé (ce lab est un gadget des fonctions copiées).

Mêmes reliquats épinglés : vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-service-sid, vfs-install-cwd.

Comment je l'ai trouvé

J'ai épinglé VFSForGit master ab95cf51 après le merge du 2026-09-28. Les hooks natifs CreateFileW avec flags 0. Windows applique alors par défaut SecurityImpersonation. Le pipe de montage permet déjà aux Users de créer une instance supplémentaire. C'est le reliquat.

Fausses pistes déjà consignées : traiter ceci comme le dehydrate du reliquat #2 (même ACL, sink différent : token, pas MoveDirectory) ; prétendre SYSTEM ; livrer le sous-débordement de 4GiB comme oracle. Du théâtre. Windows natif manquait, donc le lab est un gadget de ces fonctions. Les sockets Unix remplacent les named pipes.

Lab

python3 vfs-hook-impersonate-Abraxas-Labs.py

ou

cd lab
./run.sh

Gadget HTTP sur 127.0.0.1:19670. Copie GetGVFSPipeName, les flags CreatePipeToGVFS, l'ACL CreateNewInstance des Users, et le protocole de hook MPL|1 / S|. Un client patché avec identification SQOS n'écrit pas le witness. La dernière ligne utilise 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

Le correctif

Sur le hook CreateFileW, passer SECURITY_SQOS_PRESENT | SECURITY_IDENTIFICATION. Restreindre CreatePipeByName au SID du propriétaire de l'enlistment plus LocalSystem. Retirer CreateNewInstance pour les Users. Vérifier les bornes des longueurs de réponse des hooks.

Références

  • github.com/microsoft/VFSForGit master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a
  • common.windows.cpp CreatePipeToGVFS
  • WindowsPlatform.cs CreatePipeByName
  • CWE-284 · CWE-300

Licence

GNU Affero GPL v3.0. Voir LICENSE. Lab en loopback uniquement. Aucune garantie.

Télécharger l’outil