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-mount-dehydrate — VFS for Git ab95cf51 - Hoch - Lokal - Verbleibendes Privileg - Benutzer mounten pipe dehydrate/unmount | Kitploit
Tools/GitHubGitHub/abraxas/vfs-mount-dehydrate
Privilege EscalationSchwachstellenanalyseExploitation
GitHubabraxas/vfs-mount-dehydrate

vfs-mount-dehydrate

VFS for Git ab95cf51 - Hoch - Lokal - Verbleibendes Privileg - Benutzer mounten pipe dehydrate/unmount

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-mount-dehydrate

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

vfs-mount-dehydrate

Klasse: Privilegien-Überrest Reichweite: Lokal

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

CreatePipeByName auf der pro-Enlistment-Mount-Pipe gewährt BUILTIN\Users ReadWrite | CreateNewInstance. Es gibt keine Owner-SID-Prüfung und kein ImpersonateNamedPipeClient. HandleDehydrateFolders Path.Combinet Angreifer-Ordnernamen und speist git über ProcessStartInfo.Arguments. Der CLI-Dehydrate-Pfad führt IsFolderValid aus. Der Mount-Handler nicht.

Jeder in Users, der \\.\pipe\GVFS_<ENLISTMENT> erraten kann, kann ProjFS unmounten, Verzeichnisse als der Mount-Benutzer verschieben und git reset HEAD --hard erzwingen.

IDnoch kein CVE
KlassePrivilegien-Überrest (Named-Pipe-ACL) / Path Traversal / Argument Injection
ReichweiteLokal
CWECWE-284, CWE-22, CWE-88
CVSSHoch: 7.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
ProduktVFS for Git
Betroffenmaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a; Installer-Tags v2.0.26229.1 / v2.0.26259.1. Nur Windows.
AuthLokal. Jedes BUILTIN\Users-Principal, während das Opfer einen Mount hat
LizenzGNU Affero GPL v3.0
LabNur 127.0.0.1. how=gadget (keine Windows-VM / kein Live-ProjFS).

Pipe-Protokoll: UTF-8 Header oder Header|body, terminiert durch Byte 0x03. Pipe-Name ist GVFS_ + großgeschriebener Enlistment-Root mit : ersetzt durch _ (Beispiel C:\Repos\Foo -> \\.\pipe\GVFS_C_\REPOS\FOO).

Was ein Angreifer tun kann

Opfer hat gvfs mount an einem bekannten Root. Angreifer ist ein anderes Users-Principal auf derselben Maschine. Integrität und Verfügbarkeit als das Opfer. Nicht SYSTEM. Keine Shell für sich allein.

PrivilegMethode / SinkWas es gewährtRecon / Integrität / VerfügbarkeitLab-bewiesen oder abgeleitet
Verbindung zur Opfer-Mount-PipeCreatePipeByName ACL BuiltinUsers ReadWrite | CreateNewInstance; keine Owner-PrüfungMount-IPC ansprechenRecon der PipeLab-bewiesen (Gadget-ACL). Angreifer-SID akzeptiert; Owner-only-Modus liefert Connect-Denied
Enlistment-Pfad, Cache-Pfad, RepoUrl lesenGetStatusDen Root leaken, der für Überrest #1 / #4 verwendet wirdReconLab-bewiesen. Status-JSON enthielt RepoUrl und GVFS_C_\REPOS\FOO
ProjFS unmounten und gvfs.mount beendenNachricht UnmountDas Enlistment lahmlegenVerfügbarkeitLab-bewiesen. Antwortet Ack dann Complete; Mount-Status Unmounted
Unmount bei einem Parse-FehlerReleaseLock mit leerem Body -> RequestData == null -> UnmountAndStopWorkingDirectoryCallbacks + Environment.ExitDerselbe Unmount plus Prozess-ExitVerfügbarkeitLab-bewiesen. Leeres ReleaseLock| unmountete
Den Arbeitsbaum des Opfers verwerfenDehydrate|{"Folders":"--hard",...}. movedFolders.Add selbst wenn das Quellverzeichnis fehlt. Reset("HEAD", "\"--hard\" ") wird nach Quote-Strip zu git reset HEAD --hardDirty getrackte Dateien zerstörenIntegrität / VerfügbarkeitLab-bewiesen. Dirty getrackte Datei verlor den Witness-String
Einen Ordner als das Opfer aus dem Worktree verschiebenPath.Combine(WorkingDirectoryBackingRoot, folder) + MoveDirectory nach BackupFolderPathEinen Worktree-Ordner stehlen / verschiebenIntegritätLab-bewiesen. keepme verließ src und erschien unter dem Angreifer-Backup-Pfad
.. traversieren (CLI IsFolderValid wird nicht verwendet)dasselbe Combine; ..\secretEin Geschwister verschieben, das der Mount-Benutzer schreiben kannIntegritätLab-bewiesen. Geschwister secret landete unter dem Angreifer-Backup-Pfad. Anwenden von IsFolderValid blockierte es
Andere vom Opfer beschreibbare Verzeichnisse stehlen oder zerstörendasselbe Move mit einer ..\-Kette, die außerhalb des Enlistments auflöstBreiteres Move als der Mount-BenutzerIntegritätAbgeleitet aus Combine. Dieses Lab verwendet nur einen Wegwerf-Baum
Code-Ausführung als das Opferdiese PipeProzess-Erstellung eines Angreifer-ImagesIntegritätGeschlossen. Keine Prozess-Erstellung eines Angreifer-Images bei diesem Überrest (siehe vfs-service-sid und vfs-hook-impersonate)
SYSTEMMount-IPCLocalSystemIntegritätGeschlossen. Mount läuft als der Enlistment-Benutzer

--hard ist kein ..-Pfad. CLI IsFolderValid erlaubt es trotzdem. Ein Fix muss auch optionsähnliche Ordnernamen ablehnen.

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

Wie ich es gefunden habe

Ich pinnte VFSForGit master ab95cf51 nach dem Merge vom 2026-09-28. Die Service-Pipe und die Pro-Enlistment-Mount-Pipe teilen CreatePipeByName. Dehydrate auf der CLI validiert Ordner. Der Mount-Handler nicht.

Bereits festgehaltene Irrwege: --hard als Path Traversal behandeln (es ist Argument Injection nach Quote-Strip); SYSTEM behaupten; eine Reverse Shell. Theater. Natives Windows fehlte, also ist das Lab ein Gadget dieser Funktionen plus ein Wegwerf-git-Baum.

Lab

python3 vfs-mount-dehydrate-Abraxas-Labs.py

oder

cd lab
./run.sh

Gadget-HTTP auf 127.0.0.1:19640, das die Pipe-Nachrichtenform spricht. Wegwerf-git-Baum im Container. Keine Reverse Shell. Kein echter Profilpfad. Letzte Zeile verwendet how=gadget.

SUCCESS vfs-mount-dehydrate how=gadget unmount=yes reset-hard=yes dirty-gone=yes move-inside=yes move-dotdot=yes pipe-acl=users-no-owner is-folder-valid-not-on-pipe=yes VFS-MOUNT-DEHYDRATE-WITNESS

Der Fix

CreatePipeByName auf die Enlistment-Owner-SID plus LocalSystem beschränken. CreateNewInstance für Users entfernen. Den Client impersonieren und Owner verlangen. IsFolderValid in HandleDehydrateFolders replizieren und Namen ablehnen, die wie git-Optionen aussehen. ReleaseLock-Parse-Fehler nicht als Prozess-Exit behandeln.

Referenzen

Tool herunterladen