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-service-sid — VFS pour Git ab95cf51 - Moyen - Local - Reste de privilège - le pipe de service fait confiance au JSON OwnerSID | Kitploit
Outils/GitHubGitHub/abraxas/vfs-service-sid
Authentification et AutorisationEscalade de PrivilègesAnalyse des VulnérabilitésExploitationTests d'IntrusionMauvaise ConfigurationLabs et Pratique
GitHubabraxas/vfs-service-sid

vfs-service-sid

VFS pour Git ab95cf51 - Moyen - Local - Reste de privilège - le pipe de service fait confiance au JSON OwnerSID

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-service-sid

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

vfs-service-sid

Classe : Résidu de privilège Portée : Locale

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

GVFS.Service s'exécute en tant que LocalSystem. WindowsPlatform.CreatePipeByName accorde à BUILTIN\Users ReadWrite | CreateNewInstance sur GVFS.Service.pipe. RegisterRepoHandler.Run stocke le JSON OwnerSID tel quel. Rien n'appelle ImpersonateNamedPipeClient.

Tout principal Users peut enregistrer un chemin d'attaquant sous un SID de victime. Lors du SessionLogon, le service CreateProcessAsUser gvfs mount <attacker path> en tant que la victime. L'enfant n'est pas NT AUTHORITY\SYSTEM.

IDpas encore de CVE
ClasseRésidu de privilège (autorisation manquante / exécution inter-utilisateurs)
PortéeLocale
CWECWE-862, CWE-284
CVSSMoyen : 6.6 CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
ProduitVFS for Git
Affectémaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a ; tags GitHub v2.0.26229.1 / v2.0.26259.1. Windows uniquement.
AuthLocale. Tout principal BUILTIN\Users. Connexion de la victime pour l'automount.
LicenceGNU Affero GPL v3.0
Lab127.0.0.1 uniquement. how=gadget (pas de GVFS.Service Windows réel).

Git 2.35+ dubious-ownership peut alors faire échouer git dans une arborescence contrôlée par l'attaquant. Le processus démarre tout de même en tant que la victime. Si le chemin appartient à la victime mais est inscriptible par l'attaquant (vfs-clone-acl), mount git, credential.helper et les hooks s'exécutent en tant que cet utilisateur.

Ce qu'un attaquant peut faire

Tout principal BUILTIN\Users sur une machine où le service est installé. Se connecter à \\.\pipe\GVFS.Service.pipe. Aucun privilège supplémentaire.

PrivilègeMéthode / sinkCe que cela accordeRecon / intégrité / disponibilitéProuvé en lab ou déduit
Lister toutes les racines d'enlistment activesGetActiveRepoListRequest sans vérification de SID (TryGetActiveRepos, pas GetActiveReposForUser)Chemins utilisés comme oracle de nom de pipe pour le résidu #2ReconProuvé en lab. Le gadget a listé /lab/repos/victim
Désactiver un enlistment de victime pour qu'il ne s'automounte pasUnregisterRepoRequest {EnlistmentRoot} sans vérification de SID (TryDeactivateRepo)Les dépôts de la victime restent non montésDisponibilitéProuvé en lab. Ligne de la victime disparue de la liste active
Persister un chemin d'attaquant sous le SID de la victimeRegisterRepoRequest JSON EnlistmentRoot + OwnerSID ; TryRegisterRepo stocke les deuxLigne de registre chemin-attaquant + SID victimeIntégritéProuvé en lab. Ligne de registre /lab/repos/attacker + S-1-5-21-1000-2000-3000-1001
Démarrer GVFS.exe mount <attacker path> en tant que la victime à la connexionOnSessionChange SessionLogon -> AutoMountRepos(userId) -> TryRunAs / CreateProcessAsUserCréation de processus inter-utilisateurs en tant qu'utilisateur connectéIntégritéProuvé en lab sur le gadget. Parent lancé GVFS.Service, argv mount /lab/repos/attacker, uid 1002 victim, témoin écrit
S'exécuter en tant que NT AUTHORITY\SYSTEMMême automountEnfant LocalSystemIntégritéFermé. L'enfant whoami est la victime, pas SYSTEM (child-not-system=yes)
Git / hook / credential.helper en tant que la victime dans une arborescence contrôlée par l'attaquantLa création de processus a toujours lieu ; git 2.35+ safe.directory peut échouerRCE par hook en tant que victime si l'arborescence appartient à la victime mais est inscriptible par l'attaquantIntégritéDéduit. Le lab n'a pas exécuté le git de Microsoft. Lier le chemin comme appartenant à la victime mais inscriptible par l'attaquant pour un RCE par hook

Fermé sur ce pin : accès distant non authentifié (le named pipe est local). Shell SYSTEM. L'ACL par défaut du pipe laisse toujours entrer les Users ; un register patché qui lie le SID du client (gadget X-Patched: 1) n'automounte pas le chemin de l'attaquant pour la victime.

Résidus du même pin : vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-hook-impersonate, vfs-install-cwd.

Comment je l'ai trouvé

J'ai épinglé VFSForGit master ab95cf51 après le merge du 2026-09-28. L'ACL du pipe du service est Users ReadWrite. Register stocke le JSON OwnerSID. SessionLogon automonte en tant que ce SID. Rien n'usurpe l'identité du client du pipe.

Fausses pistes déjà consignées : appeler cela un shell SYSTEM (l'automount est un CreateProcessAsUser du jeton de connexion) ; traiter le git safe.directory comme une autorisation de l'IPC ; un reverse shell. Du théâtre. Windows natif était absent, donc le lab est un gadget des handlers du pin plus un oracle TCP Unix.

Lab

python3 vfs-service-sid-Abraxas-Labs.py

ou

cd lab
./run.sh

Gadget HTTP sur 127.0.0.1:19660. Témoin VFS-SERVICE-SID-WITNESS. La dernière ligne utilise how=gadget.

SUCCESS vfs-service-sid how=gadget register-forged-sid=yes automount-as-victim=yes child-not-system=yes VFS-SERVICE-SID-WITNESS

Le correctif

Usurper l'identité du client du named pipe (ImpersonateNamedPipeClient / NamedPipeServerStream.RunAsClient). Ignorer le JSON OwnerSID ; lier TryRegisterRepo au SID du client. Restreindre CreatePipeByName à l'utilisateur interactif et à LocalSystem (retirer BuiltinUsersSid ReadWrite / CreateNewInstance). GetActiveRepoList ne devrait retourner que les dépôts de ce client. UnregisterRepo devrait exiger la même correspondance de SID.

Références

Télécharger l’outil