
VFS para Git ab95cf51 - Alta - Local - Privilégio remanescente - clone Authenticated Users GENERIC_WRITE
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-clone-acl
Classe: Privilégio remanescente Alcance: Local
VFS for Git master ab95cf51 (tag v2.0.26259.1) - Microsoft
CloneVerb cria PrimaryEnlistmentRoot com TryCreateDirectoryAccessibleByAuthUsers. Esse helper adiciona NT AUTHORITY\Authenticated Users GENERIC_READ|WRITE|EXECUTE|DELETE com ContainerInherit|ObjectInherit. O comentário fala sobre acesso elevado vs não elevado para o mesmo usuário. O SID é todo usuário autenticado.
Depois que a vítima executa gvfs clone, outro usuário logado pode escrever nessa árvore, incluindo src\.git\hooks. O repositório permanece pertencente à vítima, então o safe.directory do git não bloqueia.
| ID | sem CVE ainda |
| Classe | Privilégio remanescente (ACL de diretório excessivamente permissiva / plantio 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 |
| Produto | VFS for Git |
| Afetado | master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (tag v2.0.26259.1). Somente Windows. |
| Autenticação | Local. A vítima executa gvfs clone. O atacante é outro usuário autenticado. |
| Licença | GNU Affero GPL v3.0 |
| Lab | Somente 127.0.0.1. how=gadget (sem Windows nativo / ProjFS). |
Este é um RCE no host local como o clonador no próximo hook do git/GVFS. Não é um shell SYSTEM. O lab apenas plantou um arquivo canário; não executou um hook.
A vítima clonou com GVFS. O atacante é outro principal Authenticated Users logado.
| Privilégio | Método / sink | O que concede | Recon / integridade / disponibilidade | Comprovado em lab ou inferido |
|---|---|---|---|---|
| Herdar GENERIC_WRITE na raiz do enlistment | CloneVerb chama TryCreateDirectoryAccessibleByAuthUsers(PrimaryEnlistmentRoot) | Todo usuário autenticado pode escrever na árvore | Integridade | Comprovado em lab no gadget. A linha do icacls é NT AUTHORITY\Authenticated Users:(OI)(CI)(GR,GW,GE,D), SID S-1-5-11, máscara 0xe0010000 |
Herdar essa ACE para os filhos, incluindo .git/hooks | ContainerInherit | ObjectInherit | O diretório de hooks é gravável pelo atacante | Integridade | Comprovado em lab. authusers_hooks=yes |
Plantar um arquivo em src/.git/hooks como o atacante | escrever VFS-CLONE-ACL-WITNESS | Canário no diretório de hooks pertencente à vítima | Integridade | Comprovado em lab. O proprietário é o uid 1001 do atacante, o texto é o witness |
| Executar um hook plantado como a vítima no próximo comando git/GVFS | sobrescrever pre-command / loader do GVFS em um clone descartável | Código no host como o clonador | Integridade | Inferido. O lab apenas plantou um arquivo canário; não executou um hook |
| Escrever o cache de objetos local da mesma forma | LocalCacheResolver.cs mesmo helper | A árvore de cache é gravável por Auth Users | Integridade | Inferido. O lab clonou apenas a raiz do enlistment |
| Negativo: ACL somente do proprietário | 0700, sem ACE de Authenticated Users | Escrita do atacante negada | Fechado | Comprovado em lab fechado. A escrita do atacante é EACCES |
| other:: gravável por todos | n/a | Escrita POSIX other | Fechado | Comprovado em lab fechado. other_write=no |
| Escrita remota não autenticada | n/a | Escrita pela rede | Fechado | Segundo login local |
| Shell SYSTEM | n/a | LocalSystem | Fechado | O próximo hook executa como o clonador, não como LocalSystem |
Outros remanescentes do mesmo pin: vfs-quote-breakout, vfs-mount-dehydrate, vfs-service-sid, vfs-hook-impersonate, vfs-install-cwd.
Eu fixei o master do VFSForGit ab95cf51 após o merge de 2026-09-28. O clone cria a raiz do enlistment com um helper cujo comentário é sobre split-token do UAC. O SID é AuthenticatedUserSid. Isso é todo usuário logado, não o usuário criador.
Caminhos errados já registrados: tratar isso como gravável por todos other:: (não é; o other POSIX não tinha escrita); alegar SYSTEM; executar um hook plantado no lab. Teatro. O Windows nativo estava ausente, então o lab é um gadget dessas funções como uma ACL de grupo nomeado POSIX.
python3 vfs-clone-acl-Abraxas-Labs.py
ou
cd lab
./run.sh
Gadget HTTP em 127.0.0.1:19650. Copia TryCreateDirectoryAccessibleByAuthUsers e aplica a mesma ACE como uma ACL de grupo nomeado POSIX (authusers). A última linha 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
Conceda ao usuário criador (e opcionalmente aos Administrators para o UAC), não a AuthenticatedUserSid. O equivalente no icacls é (OI)(CI)(M) somente para o proprietário.
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3aCloneVerb.csWindowsFileSystem.cs TryCreateDirectoryAccessibleByAuthUsersLocalCacheResolver.csGNU Affero GPL v3.0. Veja LICENSE. Somente lab em loopback. Sem garantia.