
VFS für Git ab95cf51 - Hoch - Lokal - Verbleibendes Privileg - clone Authentifizierte Benutzer GENERIC_WRITE
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-clone-acl
Klasse: Privilegien-Überrest Reichweite: Lokal
VFS for Git master ab95cf51 (Tag v2.0.26259.1) - Microsoft
CloneVerb erstellt PrimaryEnlistmentRoot mit TryCreateDirectoryAccessibleByAuthUsers. Dieser Helfer fügt NT AUTHORITY\Authenticated Users GENERIC_READ|WRITE|EXECUTE|DELETE mit ContainerInherit|ObjectInherit hinzu. Der Kommentar spricht über erhöhten vs. nicht erhöhten Zugriff für denselben Benutzer. Die SID ist jeder authentifizierte Benutzer.
Nachdem das Opfer gvfs clone ausgeführt hat, kann ein anderer angemeldeter Benutzer in diesen Baum schreiben, einschließlich src\.git\hooks. Das Repository bleibt im Besitz des Opfers, sodass git safe.directory nicht blockiert.
| ID | noch keine CVE |
| Klasse | Privilegien-Überrest (übermäßig permissives Verzeichnis-ACL / Hook-Plant) |
| Reichweite | Lokal |
| CWE | CWE-732, CWE-276 |
| CVSS | Hoch: 7.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Produkt | VFS for Git |
| Betroffen | master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (Tag v2.0.26259.1). Nur Windows. |
| Auth | Lokal. Opfer führt gvfs clone aus. Angreifer ist ein anderer authentifizierter Benutzer. |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1. how=gadget (kein natives Windows / ProjFS). |
Dies ist lokale Host-RCE als der Kloner beim nächsten git/GVFS-Hook. Keine SYSTEM-Shell. Das Lab hat nur eine Canary-Datei platziert; es hat keinen Hook ausgeführt.
Das Opfer hat mit GVFS geklont. Der Angreifer ist ein anderer angemeldeter Authenticated-Users-Principal.
| Privileg | Methode / Sink | Was es gewährt | Recon / Integrität / Verfügbarkeit | Lab-bewiesen oder abgeleitet |
|---|---|---|---|---|
| GENERIC_WRITE auf das Enlistment-Root erben | CloneVerb ruft TryCreateDirectoryAccessibleByAuthUsers(PrimaryEnlistmentRoot) auf | Jeder authentifizierte Benutzer kann in den Baum schreiben | Integrität | Lab-bewiesen am Gadget. icacls-Zeile ist NT AUTHORITY\Authenticated Users:(OI)(CI)(GR,GW,GE,D), SID S-1-5-11, Maske 0xe0010000 |
Diese ACE auf Kinder erben, einschließlich .git/hooks | ContainerInherit | ObjectInherit | Hooks-Verzeichnis ist für Angreifer beschreibbar | Integrität | Lab-bewiesen. authusers_hooks=yes |
Eine Datei unter src/.git/hooks als Angreifer platzieren | VFS-CLONE-ACL-WITNESS schreiben | Canary im Hooks-Verzeichnis des Opfers | Integrität | Lab-bewiesen. Besitzer ist Angreifer-uid 1001, Text ist der Witness |
| Einen platzierten Hook als Opfer beim nächsten git/GVFS-Befehl ausführen | pre-command / GVFS-Loader in einem Wegwerf-Klon überschreiben | Host-Code als der Kloner | Integrität | Abgeleitet. Lab hat nur eine Canary-Datei platziert; es hat keinen Hook ausgeführt |
| Den lokalen Objekt-Cache auf dieselbe Weise beschreiben | LocalCacheResolver.cs derselbe Helfer | Cache-Baum ist für Auth Users beschreibbar | Integrität | Abgeleitet. Lab hat nur das Enlistment-Root geklont |
| Negativ: Nur-Eigentümer-ACL | 0700, keine Authenticated-Users-ACE | Angreifer-Schreibzugriff verweigert | Geschlossen | Lab-bewiesen geschlossen. Angreifer-Schreibzugriff ist EACCES |
| Weltweit beschreibbar other:: | n/a | POSIX other write | Geschlossen | Lab-bewiesen geschlossen. other_write=no |
| Remote nicht authentifizierter Schreibzugriff | n/a | Netzwerk-Schreibzugriff | Geschlossen | Lokale zweite Anmeldung |
| SYSTEM-Shell | n/a | LocalSystem | Geschlossen | Nächster Hook läuft als der Kloner, nicht als LocalSystem |
Gleiche Pin-Überreste: vfs-quote-breakout, vfs-mount-dehydrate, vfs-service-sid, vfs-hook-impersonate, vfs-install-cwd.
Ich habe VFSForGit master ab95cf51 nach dem Merge vom 2026-09-28 gepinnt. Clone erstellt das Enlistment-Root mit einem Helfer, dessen Kommentar UAC-Split-Token ist. Die SID ist AuthenticatedUserSid. Das ist jeder angemeldete Benutzer, nicht der erstellende Benutzer.
Bereits dokumentierte Irrwege: dies als weltweit beschreibbar other:: zu behandeln (ist es nicht; POSIX other hatte kein Schreibrecht); SYSTEM zu behaupten; einen platzierten Hook im Lab auszuführen. Theater. Natives Windows fehlte, also ist das Lab ein Gadget dieser Funktionen als POSIX-Named-Group-ACL.
python3 vfs-clone-acl-Abraxas-Labs.py
oder
cd lab
./run.sh
Gadget-HTTP auf 127.0.0.1:19650. Kopiert TryCreateDirectoryAccessibleByAuthUsers und wendet dieselbe ACE als POSIX-Named-Group-ACL (authusers) an. Letzte Zeile verwendet how=gadget.
SUCCESS vfs-clone-acl how=gadget auth-users-write=yes inherit=OI-CI attacker-hook-write=yes owner-only=eacces VFS-CLONE-ACL-WITNESS
Gewähre dem erstellenden Benutzer (und optional Administrators für UAC), nicht AuthenticatedUserSid. Das icacls-Äquivalent ist (OI)(CI)(M) nur für den Eigentümer.
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3aCloneVerb.csWindowsFileSystem.cs TryCreateDirectoryAccessibleByAuthUsersLocalCacheResolver.csGNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.