Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
vfs-clone-acl — VFS for Git ab95cf51 - High - Local - Privilege leftover - clone Authenticated Users GENERIC_WRITE | Kitploit
Tools/GitHubGitHub/abraxas/vfs-clone-acl
Privilege EscalationVulnerability AnalysisExploitationPenetration TestingPapers & ResearchMisconfigurationRed Teaming
GitHubabraxas/vfs-clone-acl

vfs-clone-acl

VFS for Git ab95cf51 - High - Local - Privilege leftover - clone Authenticated Users GENERIC_WRITE

View Repository
83 days agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

Abraxas Labs - vfs-clone-acl

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

vfs-clone-acl

Class: Privilege leftover Reach: Local

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

CloneVerb creates PrimaryEnlistmentRoot with TryCreateDirectoryAccessibleByAuthUsers. That helper adds NT AUTHORITY\Authenticated Users GENERIC_READ|WRITE|EXECUTE|DELETE with ContainerInherit|ObjectInherit. The comment talks about elevated vs non-elevated access for the same user. The SID is every authenticated user.

After the victim gvfs clones, another logged-on user can write into that tree, including src\.git\hooks. The repo stays victim-owned, so git safe.directory does not block.

IDno CVE yet
ClassPrivilege leftover (over-permissive directory ACL / hook plant)
ReachLocal
CWECWE-732, CWE-276
CVSSHigh: 7.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
ProductVFS for Git
Affectedmaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (tag v2.0.26259.1). Windows only.
AuthLocal. Victim gvfs clones. Attacker is another authenticated user.
LicenseGNU Affero GPL v3.0
Lab127.0.0.1 only. how=gadget (no native Windows / ProjFS).

This is local host RCE as the cloner on the next git/GVFS hook. Not a SYSTEM shell. The lab planted a canary file only; it did not execute a hook.

What an attacker can do

Victim has cloned with GVFS. Attacker is another logged-on Authenticated Users principal.

PrivilegeMethod / sinkWhat it grantsRecon / integrity / availabilityLab-proven or inferred
Inherit GENERIC_WRITE on the enlistment rootCloneVerb calls TryCreateDirectoryAccessibleByAuthUsers(PrimaryEnlistmentRoot)Every authenticated user can write the treeIntegrityLab-proven on the gadget. icacls line is NT AUTHORITY\Authenticated Users:(OI)(CI)(GR,GW,GE,D), SID S-1-5-11, mask 0xe0010000
Inherit that ACE onto children including .git/hooksContainerInherit | ObjectInheritHooks dir is attacker-writableIntegrityLab-proven. authusers_hooks=yes
Plant a file under src/.git/hooks as the attackerwrite VFS-CLONE-ACL-WITNESSCanary in the victim-owned hooks dirIntegrityLab-proven. Owner is attacker uid 1001, text is the witness
Run a planted hook as the victim on the next git/GVFS commandoverwrite pre-command / GVFS loader in a throwaway cloneHost code as the clonerIntegrityInferred. Lab planted a canary file only; it did not execute a hook
Write the local object cache the same wayLocalCacheResolver.cs same helperCache tree is Auth Users writableIntegrityInferred. Lab cloned the enlistment root only
Negative: owner-only ACL0700, no Authenticated Users ACEAttacker write deniedClosedLab-proven closed. Attacker write is EACCES
World-writable other::n/aPOSIX other writeClosedLab-proven closed. other_write=no
Remote unauthenticated writen/aNetwork writeClosedLocal second login
SYSTEM shelln/aLocalSystemClosedNext hook runs as the cloner, not LocalSystem

Same pin leftovers: vfs-quote-breakout, vfs-mount-dehydrate, vfs-service-sid, vfs-hook-impersonate, vfs-install-cwd.

How I found it

I pinned VFSForGit master ab95cf51 after the 2026-09-28 merge. Clone creates the enlistment root with a helper whose comment is UAC split-token. The SID is AuthenticatedUserSid. That is every logged-on user, not the creating user.

Wrong turns already recorded: treating this as world-writable other:: (it is not; POSIX other had no write); claiming SYSTEM; executing a planted hook in the lab. Theatre. Native Windows was missing, so the lab is a gadget of those functions as a POSIX named-group ACL.

Lab

python3 vfs-clone-acl-Abraxas-Labs.py

or

cd lab
./run.sh

Gadget HTTP on 127.0.0.1:19650. Copies TryCreateDirectoryAccessibleByAuthUsers and applies the same ACE as a POSIX named-group ACL (authusers). Last line uses 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

The fix

Grant the creating user (and optionally Administrators for UAC), not AuthenticatedUserSid. icacls equivalent is (OI)(CI)(M) for the owner only.

References

  • github.com/microsoft/VFSForGit master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a
  • CloneVerb.cs
  • WindowsFileSystem.cs TryCreateDirectoryAccessibleByAuthUsers
  • LocalCacheResolver.cs
  • CWE-732 · CWE-276

License

GNU Affero GPL v3.0. See LICENSE. Loopback lab only. No warranty.

Download Tool