
VFS para Git ab95cf51 - Alta - Local - LPE - CWD do instalador não qualificado gvfs.exe
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-install-cwd
Classe: LPE Alcance: Local
VFS for Git master ab95cf51 (tag v2.0.26259.1) - Microsoft
Setup.iss PrepareToInstall sempre chama ExecWithResult('gvfs.exe', 'service --list-mounted', '', ...) através de {cmd} /S /C com WorkingDir vazio. Isso herda o diretório a partir do qual o administrador iniciou SetupGVFS*.exe. O cmd.exe pesquisa no CWD e depois no PATH. UnmountRepos usa o mesmo nome não qualificado.
O mesmo arquivo já qualifica os caminhos seguros. sc.exe é {sys}\SC.EXE. A remontagem pós-instalação é {app}\gvfs.exe. A primeira instalação ainda não tem um gvfs.exe real no PATH, então uma plantação ao lado do instalador assinado vence.
| ID | sem CVE ainda |
| Classe | LPE (pesquisa no CWD do instalador elevado / exec não qualificado) |
| Alcance | Local (UI:R) |
| CWE | CWE-427, CWE-428 |
| CVSS | Alto: 7.3 CVSS:3.1/AV:L/AC:L/PR:L/UI:R/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. Plante gvfs.exe no diretório a partir do qual um administrador inicia SetupGVFS*.exe. |
| Licença | GNU Affero GPL v3.0 |
| Lab | Somente 127.0.0.1. how=gadget (sem SetupGVFS*.exe nativo). |
Irmão do CVE-2021-47874 (binPath sem aspas), sink diferente. sc.exe e o caminho de remontagem neste pin já estão qualificados.
Plante um gvfs.exe benigno ao lado do instalador assinado. Quando um administrador inicia a instalação a partir dessa pasta, PrepareToInstall executa a plantação como o instalador elevado.
| Privilégio | Método / sink | O que concede | Recon / integridade / disponibilidade | Comprovado em lab ou inferido |
|---|---|---|---|---|
| Herdar o CWD do instalador | ExecWithResult com WorkingDir vazio (Setup.iss ~830) | A pesquisa começa na pasta de lançamento | Integridade da ordem de pesquisa | Comprovado em lab. Gadget working_dir="", pesquisa cwd-then-path. |
Resolver gvfs.exe não qualificado a partir do CWD antes do PATH | cmd.exe /S /C ""gvfs.exe" service --list-mounted > ..." | A plantação vence o PATH | Integridade | Comprovado em lab. prepare-resolved=cwd-plant, resolvido /lab/cwd/gvfs.exe. A cópia no PATH não foi atingida. |
| Executar como o instalador elevado | Proprietário do arquivo testemunha = uid do gadget (substituto para setup elevado) | Execução de código equivalente a admin | Integridade | Comprovado em lab no uid do gadget. IL de admin nativo não disponível neste host. |
| Mesma plantação na desmontagem | Exec('gvfs.exe', 'service --unmount-all', '', ...) (Setup.iss ~544) | A plantação executa novamente durante a desmontagem | Integridade | Comprovado em lab. unmount-resolved=cwd-plant. |
| Continuar a instalação após a plantação | A plantação sai com 0 e grava apenas um canário | A instalação prossegue | Disponibilidade da instalação | Comprovado em lab. O texto da testemunha é VFS-INSTALL-CWD-WITNESS. Sem payload. |
Fechado neste resíduo: remontagem {app}\gvfs.exe (remount-resolved=app, remount-plant=no). {sys}\SC.EXE com aspas (sc-resolved=sys). Pesquisa POSIX somente no PATH (unix-cwd-search=no). SetupGVFS*.exe / ProjFS ao vivo (este host é macOS; how=gadget). Exec remoto não autenticado. ImagePath sem aspas CVE-2021-47874 (binPath já com aspas).
Resíduos do mesmo pin: vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-service-sid, vfs-hook-impersonate.
Fiz o pin do VFSForGit master ab95cf51 após o merge de 2026-09-28. A lista de exclusão é o CVE-2021-47874. Setup.iss já coloca binPath entre aspas e qualifica {sys}\SC.EXE e {app}\gvfs.exe. PrepareToInstall ainda passa um gvfs.exe puro para cmd.exe.
Caminhos errados já registrados: reenviar o CVE-2021-47874; tratar a pesquisa POSIX somente no PATH como o bug do Windows; afirmar que a remontagem também é não qualificada. Teatro. O Windows nativo estava ausente, então o lab é um gadget de ExecWithResult mais a pesquisa CWD-then-PATH do cmd.
python3 vfs-install-cwd-Abraxas-Labs.py
ou
cd lab
./run.sh
Gadget HTTP em 127.0.0.1:19680. Testemunha VFS-INSTALL-CWD-WITNESS. A última linha usa how=gadget.
SUCCESS vfs-install-cwd how=gadget prepare-resolved=cwd-plant prepare-witness=yes remount-resolved=app remount-plant=no unix-cwd-search=no VFS-INSTALL-CWD-WITNESS
ExpandConstant('{app}\gvfs.exe') quando presente, caso contrário pule a consulta list-mounted na primeira instalação. Nunca passe um gvfs.exe puro para cmd.exe. Qualifique UnmountRepos da mesma forma.
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3aSetup.iss PrepareToInstall / UnmountRepos / {sys}\SC.EXE / {app}\gvfs.exeImagePath sem aspasGNU Affero GPL v3.0. Veja LICENSE. Somente lab em loopback. Sem garantia.