Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
vfs-service-sid — VFS for Git ab95cf51 - Mittel - Lokal - Verbleibendes Privileg - Dienst-Pipe vertraut JSON OwnerSID | Kitploit
Tools/GitHubGitHub/abraxas/vfs-service-sid
Authentifizierung & AutorisierungPrivilege EscalationSchwachstellenanalyseExploitationPenetrationstestsFehlkonfigurationLabs & Praxis
GitHubabraxas/vfs-service-sid

vfs-service-sid

VFS for Git ab95cf51 - Mittel - Lokal - Verbleibendes Privileg - Dienst-Pipe vertraut JSON OwnerSID

Repository anzeigen
5vor 4 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Abraxas Labs - vfs-service-sid

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

vfs-service-sid

Klasse: Privilegien-Überrest Reichweite: Lokal

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

GVFS.Service läuft als LocalSystem. WindowsPlatform.CreatePipeByName gewährt BUILTIN\Users ReadWrite | CreateNewInstance auf GVFS.Service.pipe. RegisterRepoHandler.Run speichert die JSON-OwnerSID unverändert. Nichts ruft ImpersonateNamedPipeClient auf.

Jeder Users-Principal kann einen Angreifer-Pfad unter einer Opfer-SID registrieren. Bei SessionLogon führt der Dienst CreateProcessAsUser mit gvfs mount <Angreifer-Pfad> als das Opfer aus. Das Kindprozess ist nicht NT AUTHORITY\SYSTEM.

IDnoch keine CVE
KlassePrivilegien-Überrest (fehlende Autorisierung / Cross-User-Ausführung)
ReichweiteLokal
CWECWE-862, CWE-284
CVSSMittel: 6.6 CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
ProduktVFS for Git
Betroffenmaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a; GitHub-Tags v2.0.26229.1 / v2.0.26259.1. Nur Windows.
AuthLokal. Jeder BUILTIN\Users-Principal. Opfer-Anmeldung für Automount.
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1. how=gadget (kein aktiver Windows-GVFS.Service).

Git 2.35+ dubious-ownership kann dann git innerhalb eines angreifer-eigenen Verzeichnisbaums fehlschlagen lassen. Der Prozess startet dennoch als das Opfer. Wenn der Pfad opfer-eigen, aber angreifer-beschreibbar ist (vfs-clone-acl), laufen mount git, credential.helper und Hooks als dieser Benutzer.

Was ein Angreifer tun kann

Jeder BUILTIN\Users-Principal auf einer Maschine, auf der der Dienst installiert ist. Verbindung zu \\.\pipe\GVFS.Service.pipe. Keine zusätzlichen Privilegien.

PrivilegMethode / SinkWas es gewährtRecon / Integrität / VerfügbarkeitLab-bewiesen oder abgeleitet
Jeden aktiven Enlistment-Root auflistenGetActiveRepoListRequest ohne SID-Prüfung (TryGetActiveRepos, nicht GetActiveReposForUser)Pfade, die als Pipe-Name-Oracle für Überrest #2 verwendet werdenReconLab-bewiesen. Gadget listete /lab/repos/victim auf
Ein Opfer-Enlistment deaktivieren, damit es nicht automountetUnregisterRepoRequest {EnlistmentRoot} ohne SID-Prüfung (TryDeactivateRepo)Opfer-Repos bleiben unmountedVerfügbarkeitLab-bewiesen. Opfer-Zeile aus der aktiven Liste verschwunden
Angreifer-Pfad unter Opfer-SID persistierenRegisterRepoRequest JSON EnlistmentRoot + OwnerSID; TryRegisterRepo speichert beidesRegistry-Zeile Angreifer-Pfad + Opfer-SIDIntegritätLab-bewiesen. Registry-Zeile /lab/repos/attacker + S-1-5-21-1000-2000-3000-1001
GVFS.exe mount <Angreifer-Pfad> als das Opfer bei Anmeldung startenOnSessionChange SessionLogon -> AutoMountRepos(userId) -> TryRunAs / CreateProcessAsUserCross-User-Prozesserstellung als der angemeldete BenutzerIntegritätLab-bewiesen am Gadget. Spawn-Elternprozess GVFS.Service, argv mount /lab/repos/attacker, uid 1002 victim, Witness geschrieben
Als NT AUTHORITY\SYSTEM ausführenDerselbe AutomountLocalSystem-KindprozessIntegritätGeschlossen. Kindprozess whoami ist das Opfer, nicht SYSTEM (child-not-system=yes)
Git / Hook / credential.helper als das Opfer innerhalb eines angreifer-eigenen VerzeichnisbaumsProzesserstellung findet weiterhin statt; git 2.35+ safe.directory kann fehlschlagenHook-RCE als Opfer, wenn der Baum opfer-eigen, aber angreifer-beschreibbar istIntegritätAbgeleitet. Lab hat Microsoft git nicht ausgeführt. Den Pfad als opfer-eigen, aber angreifer-beschreibbar binden für Hook-RCE

Geschlossen bei diesem Pin: entfernter unauthentifizierter Zugriff (Named Pipe ist lokal). SYSTEM-Shell. Die Standard-Pipe-ACL lässt Users weiterhin herein; ein gepatchtes Register, das die Client-SID bindet (Gadget X-Patched: 1), automountet den Angreifer-Pfad nicht für das Opfer.

Gleiche Pin-Überreste: vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-hook-impersonate, vfs-install-cwd.

Wie ich es gefunden habe

Ich habe VFSForGit master ab95cf51 nach dem Merge vom 2026-09-28 gepinnt. Die Service-Pipe-ACL ist Users ReadWrite. Register speichert JSON OwnerSID. SessionLogon automountet als diese SID. Nichts impersoniert den Pipe-Client.

Bereits dokumentierte Irrwege: dies als SYSTEM-Shell zu bezeichnen (Automount ist CreateProcessAsUser des Logon-Tokens); git safe.directory als Autorisierung des IPC zu behandeln; eine Reverse Shell. Theater. Native Windows fehlte, daher ist das Lab ein Gadget der Pin-Handler plus ein Unix-TCP-Oracle.

Lab

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

oder

cd lab
./run.sh

Gadget-HTTP auf 127.0.0.1:19660. Witness VFS-SERVICE-SID-WITNESS. Letzte Zeile verwendet how=gadget.

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

Der Fix

Den Named-Pipe-Client impersonieren (ImpersonateNamedPipeClient / NamedPipeServerStream.RunAsClient). JSON OwnerSID ignorieren; TryRegisterRepo an die Client-SID binden. CreatePipeByName auf den interaktiven Benutzer und LocalSystem beschränken (BuiltinUsersSid ReadWrite / CreateNewInstance entfernen). GetActiveRepoList sollte nur die Repos dieses Clients zurückgeben. UnregisterRepo sollte denselben SID-Abgleich erfordern.

Referenzen

Tool herunterladen