
VFS para Git ab95cf51 - Alta - Local - Privilegio residual - clonar Authenticated Users GENERIC_WRITE
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-clone-acl
Clase: Privilegio residual Alcance: Local
VFS for Git master ab95cf51 (etiqueta v2.0.26259.1) - Microsoft
CloneVerb crea PrimaryEnlistmentRoot con TryCreateDirectoryAccessibleByAuthUsers. Ese helper añade NT AUTHORITY\Authenticated Users GENERIC_READ|WRITE|EXECUTE|DELETE con ContainerInherit|ObjectInherit. El comentario habla de acceso elevado vs no elevado para el mismo usuario. El SID es todos los usuarios autenticados.
Después de que la víctima ejecute gvfs clone, otro usuario con sesión iniciada puede escribir en ese árbol, incluido src\.git\hooks. El repositorio sigue siendo propiedad de la víctima, por lo que git safe.directory no lo bloquea.
| ID | sin CVE todavía |
| Clase | Privilegio residual (ACL de directorio demasiado permisiva / plantado de hook) |
| Alcance | Local |
| CWE | CWE-732, CWE-276 |
| CVSS | Alto: 7.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Producto | VFS for Git |
| Afectado | master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (etiqueta v2.0.26259.1). Solo Windows. |
| Auth | Local. La víctima ejecuta gvfs clone. El atacante es otro usuario autenticado. |
| Licencia | GNU Affero GPL v3.0 |
| Lab | Solo 127.0.0.1. how=gadget (sin Windows nativo / ProjFS). |
Esto es RCE en el host local como el clonador en el siguiente hook de git/GVFS. No es un shell SYSTEM. El lab solo plantó un archivo canary; no ejecutó un hook.
La víctima ha clonado con GVFS. El atacante es otro principal Authenticated Users con sesión iniciada.
| Privilegio | Método / sink | Qué otorga | Recon / integridad / disponibilidad | Probado en lab o inferido |
|---|---|---|---|---|
| Heredar GENERIC_WRITE en la raíz del enlistment | CloneVerb llama a TryCreateDirectoryAccessibleByAuthUsers(PrimaryEnlistmentRoot) | Todo usuario autenticado puede escribir el árbol | Integridad | Probado en lab en el gadget. La línea de icacls es NT AUTHORITY\Authenticated Users:(OI)(CI)(GR,GW,GE,D), SID S-1-5-11, máscara 0xe0010000 |
Heredar esa ACE a los hijos, incluido .git/hooks | ContainerInherit | ObjectInherit | El directorio de hooks es escribible por el atacante | Integridad | Probado en lab. authusers_hooks=yes |
Plantar un archivo bajo src/.git/hooks como el atacante | escribir VFS-CLONE-ACL-WITNESS | Canary en el directorio de hooks propiedad de la víctima | Integridad | Probado en lab. El propietario es el uid 1001 del atacante, el texto es el witness |
| Ejecutar un hook plantado como la víctima en el siguiente comando git/GVFS | sobrescribir pre-command / cargador de GVFS en un clon desechable | Código en el host como el clonador | Integridad | Inferido. El lab solo plantó un archivo canary; no ejecutó un hook |
| Escribir la caché de objetos local de la misma forma | LocalCacheResolver.cs mismo helper | El árbol de caché es escribible por Auth Users | Integridad | Inferido. El lab solo clonó la raíz del enlistment |
| Negativo: ACL solo para el propietario | 0700, sin ACE de Authenticated Users | Escritura del atacante denegada | Cerrado | Probado en lab cerrado. La escritura del atacante es EACCES |
| other:: escribible por todos | n/a | Escritura POSIX other | Cerrado | Probado en lab cerrado. other_write=no |
| Escritura remota no autenticada | n/a | Escritura por red | Cerrado | Segundo inicio de sesión local |
| Shell SYSTEM | n/a | LocalSystem | Cerrado | El siguiente hook se ejecuta como el clonador, no como LocalSystem |
Restos del mismo pin: vfs-quote-breakout, vfs-mount-dehydrate, vfs-service-sid, vfs-hook-impersonate, vfs-install-cwd.
Fijé VFSForGit master ab95cf51 después del merge del 2026-09-28. Clone crea la raíz del enlistment con un helper cuyo comentario es UAC split-token. El SID es AuthenticatedUserSid. Eso es todo usuario con sesión iniciada, no el usuario creador.
Caminos equivocados ya registrados: tratar esto como escribible por todos other:: (no lo es; POSIX other no tenía escritura); afirmar SYSTEM; ejecutar un hook plantado en el lab. Teatro. Faltaba Windows nativo, así que el lab es un gadget de esas funciones como una ACL de grupo con nombre POSIX.
python3 vfs-clone-acl-Abraxas-Labs.py
o
cd lab
./run.sh
Gadget HTTP en 127.0.0.1:19650. Copia TryCreateDirectoryAccessibleByAuthUsers y aplica la misma ACE como una ACL de grupo con nombre POSIX (authusers). La última línea usa 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
Conceder al usuario creador (y opcionalmente a Administrators para UAC), no a AuthenticatedUserSid. El equivalente en icacls es (OI)(CI)(M) solo para el propietario.
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3aCloneVerb.csWindowsFileSystem.cs TryCreateDirectoryAccessibleByAuthUsersLocalCacheResolver.csGNU Affero GPL v3.0. Ver LICENSE. Solo lab en loopback. Sin garantía.