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-hook-impersonate — VFS for Git ab95cf51 - Hoch - Lokal - Verbleibendes Privileg - Hook CreateFileW SecurityImpersonation | Kitploit
Tools/GitHubGitHub/abraxas/vfs-hook-impersonate
Privilege EscalationSchwachstellenanalyseExploitationPenetrationstestsPapers & ForschungRed TeamingLabs & Praxis
GitHubabraxas/vfs-hook-impersonate

vfs-hook-impersonate

VFS for Git ab95cf51 - Hoch - Lokal - Verbleibendes Privileg - Hook CreateFileW SecurityImpersonation

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-hook-impersonate

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

vfs-hook-impersonate

Klasse: Privilegien-Überrest Reichweite: Lokal

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

Native Git-Hooks (read-object, virtual-filesystem, post-index-changed) öffnen die Mount-Pipe pro Enlistment mit CreateFileW und dwFlagsAndAttributes = 0. Dadurch fehlt SECURITY_SQOS_PRESENT, sodass Windows den Client standardmäßig auf SecurityImpersonation setzt. Dieselbe Pipe-ACL, die Überrest #2 verwendet, gewährt BUILTIN\Users ReadWrite | CreateNewInstance.

Ein zweiter lokaler Benutzer kann eine zusätzliche Instanz von \\.\pipe\GVFS_<ENLISTMENT> erzeugen oder diese besetzen, ImpersonateNamedPipeClient aufrufen und als das Opfer schreiben.

IDnoch keine CVE
KlassePrivilegien-Überrest (Named-Pipe-Impersonation)
ReichweiteLokal
CWECWE-284, CWE-300
CVSSHoch: 7.1 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProduktVFS for Git
Betroffenmaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (auch aktuell gegenüber Release v2.0.26259.1). Nur Windows.
AuthLokal. Das Opfer besitzt ein GVFS-Enlistment. Angreifer ist ein beliebiges BUILTIN\Users-Principal. Das Opfer führt später git aus.
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1. how=gadget (keine Live-Windows-VM / kein installiertes VFS for Git).

Dies ist lokal. Es ist kein SYSTEM. Automount in Überrest #4 ist eine andere Pipe (GVFS.Service.pipe). Dehydrate/Unmount auf derselben Mount-Pipe ist Überrest #2.

Was ein Angreifer tun kann

Das Opfer besitzt ein GVFS-Enlistment. Der Angreifer ist ein beliebiges BUILTIN\Users-Principal. Das Opfer führt später git aus (status, checkout, alles, was die VFS-Hooks auslöst).

PrivilegMethode / SinkWas es gewährtRecon / Integrität / VerfügbarkeitIm Lab bewiesen oder abgeleitet
Das Opfer imitieren und in dessen Profil schreibenZusätzliche Instanz / Besetzen von \\.\pipe\GVFS_C_\REPOS\FOO; Hook CreateFileW flags=0; ImpersonateNamedPipeClient; %USERPROFILE%\VFS-HOOK-IMPERSONATE-WITNESS anlegenSchreiben als die UID des OpfersIntegritätIm Lab an einem Gadget bewiesen. Der Besitzer der Witness-Datei ist die UID des Opfers. Standard-Flags sind SecurityImpersonation. Die UID des Angreifers kann ohne Impersonation nicht in dieses Home schreiben
Git nach dem Besetzen weiterlaufen lassenAuf MPL|1 mit S|\x03 antworten, damit GVFS.VirtualFileSystemHook nicht hängtGit läuft weiterVerfügbarkeit des Git des OpfersIm Lab bewiesen. Hook reply_ok sowohl auf dem verwundbaren als auch auf dem gepatchten Pfad
Den Pipe-Namen aus dem Enlistment-Root erratenGetGVFSPipeName läuft vom CWD zu .gvfs, CharUpper, : -> _, Präfix \\.\pipe\GVFS_Erratbarer IPC-NameReconIm Lab bewiesen. C:\Repos\Foo\src -> \\.\pipe\GVFS_C_\REPOS\FOO
Die Pipe umlenken, ohne die laufende Instanz zu übernehmenEin getracktes src\.gvfs-Verzeichnis platzieren, sodass der Walk-up einen anderen Namen bindetBesetzen ohne Wettlauf mit dem MountIntegritätAbgeleitet aus dem Walk-up in common.windows.cpp. Im Lab wurde das echte Enlistment-.gvfs verwendet
Auch auf DLO / PICN antworten, nicht nur auf MPLDieselbe Pipe, ReadObjectHook / PostIndexChangedHookÜber Objekte lügen / skip-worktreeIntegritätAbgeleitet. Im Lab wurde nur MPL|1 gesendet
Den Hook mit einem zwei Byte großen S\x03 zum Absturz bringenVirtualFileSystemHook messageLength -= 2, dann -= 1 Unterlauf und fwrite von ~4GiBAbsturz / OOB-ReadVerfügbarkeitAbgeleitet aus main.cpp 69-90. Nicht das Orakel. Diesen Absturz nicht ausliefern

Hier ausgeschlossen: SYSTEM (der Mount ist der Enlistment-Benutzer). Remote unauthentifizierte RCE. Live-Windows-VM / installiertes VFS for Git (dieses Lab ist ein Gadget der kopierten Funktionen).

Überreste desselben Pins: vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-service-sid, vfs-install-cwd.

Wie ich es gefunden habe

Ich habe VFSForGit master ab95cf51 nach dem Merge vom 2026-09-28 gepinnt. Native Hooks rufen CreateFileW mit Flags 0 auf. Windows setzt dann standardmäßig auf SecurityImpersonation. Die Mount-Pipe erlaubt Users bereits eine zusätzliche Instanz. Das ist der Überrest.

Bereits festgehaltene Irrwege: dies als Überrest #2 Dehydrate zu behandeln (gleiche ACL, anderer Sink: Token, nicht MoveDirectory); SYSTEM zu behaupten; den 4GiB-Unterlauf als Orakel auszuliefern. Theater. Echtes Windows fehlte, daher ist das Lab ein Gadget dieser Funktionen. Unix-Sockets stehen stellvertretend für Named Pipes.

Lab

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

oder

cd lab
./run.sh

Gadget-HTTP auf 127.0.0.1:19670. Kopiert GetGVFSPipeName, die CreatePipeToGVFS-Flags, die Users-CreateNewInstance-ACL und das MPL|1 / S|-Hook-Protokoll. Ein gepatchter Client mit SQOS-Identifikation schreibt die Witness-Datei nicht. Die letzte Zeile verwendet 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

Der Fix

Beim Hook CreateFileW SECURITY_SQOS_PRESENT | SECURITY_IDENTIFICATION übergeben. CreatePipeByName auf die SID des Enlistment-Besitzers plus LocalSystem beschränken. CreateNewInstance für Users entfernen. Antwortlängen der Hooks mit Bounds-Checks versehen.

Referenzen

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

Lizenz

GNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.

Tool herunterladen