
VFS para Git ab95cf51 - Alta - Local - LPE - CWD del instalador no calificado gvfs.exe
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vfs-install-cwd
Clase: LPE Alcance: Local
VFS for Git master ab95cf51 (etiqueta v2.0.26259.1) - Microsoft
Setup.iss PrepareToInstall siempre llama a ExecWithResult('gvfs.exe', 'service --list-mounted', '', ...) a través de {cmd} /S /C con un WorkingDir vacío. Eso hereda el directorio desde el cual el administrador lanzó SetupGVFS*.exe. cmd.exe busca en el CWD y luego en el PATH. UnmountRepos usa el mismo nombre sin cualificar.
El mismo archivo ya cualifica las rutas seguras. sc.exe es {sys}\SC.EXE. El remontaje posterior a la instalación es {app}\gvfs.exe. La primera instalación aún no tiene un gvfs.exe real en el PATH, por lo que una plantación junto al instalador firmado gana.
| ID | sin CVE todavía |
| Clase | LPE (búsqueda en el CWD del instalador elevado / ejecución sin cualificar) |
| 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 |
| Producto | VFS for Git |
| Afectado | master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (etiqueta v2.0.26259.1). Solo Windows. |
| Auth | Local. Plantar gvfs.exe en el directorio desde el cual un administrador lanza SetupGVFS*.exe. |
| Licencia | GNU Affero GPL v3.0 |
| Lab | Solo 127.0.0.1. how=gadget (sin SetupGVFS*.exe nativo). |
Hermano de CVE-2021-47874 (binPath sin comillas), distinto sink. sc.exe y la ruta de remontaje en este pin ya están cualificados.
Plantar un gvfs.exe benigno junto al instalador firmado. Cuando un administrador lanza el setup desde esa carpeta, PrepareToInstall ejecuta la plantación como el instalador elevado.
| Privilegio | Método / sink | Qué otorga | Recon / integridad / disponibilidad | Probado en lab o inferido |
|---|---|---|---|---|
| Heredar el CWD del instalador | ExecWithResult con WorkingDir vacío (Setup.iss ~830) | La búsqueda comienza en la carpeta de lanzamiento | Integridad del orden de búsqueda | Probado en lab. Gadget working_dir="", búsqueda cwd-then-path. |
Resolver gvfs.exe sin cualificar desde el CWD antes que el PATH | cmd.exe /S /C ""gvfs.exe" service --list-mounted > ..." | La plantación gana sobre el PATH | Integridad | Probado en lab. prepare-resolved=cwd-plant, resuelto /lab/cwd/gvfs.exe. La copia del PATH no fue alcanzada. |
| Ejecutar como el instalador elevado | Propietario del archivo testigo = uid del gadget (sustituto del setup elevado) | Ejecución de código equivalente a administrador | Integridad | Probado en lab sobre el uid del gadget. IL de administrador nativo no disponible en este host. |
| La misma plantación en el desmontaje | Exec('gvfs.exe', 'service --unmount-all', '', ...) (Setup.iss ~544) | La plantación se ejecuta de nuevo durante el desmontaje | Integridad | Probado en lab. unmount-resolved=cwd-plant. |
| Continuar el setup tras la plantación | La plantación sale con 0 y solo escribe un canario | El setup continúa | Disponibilidad de la instalación | Probado en lab. El texto testigo es VFS-INSTALL-CWD-WITNESS. Sin payload. |
Cerrado en este remanente: remontaje {app}\gvfs.exe (remount-resolved=app, remount-plant=no). {sys}\SC.EXE entre comillas (sc-resolved=sys). Búsqueda solo en PATH de POSIX (unix-cwd-search=no). SetupGVFS*.exe / ProjFS en vivo (este host es macOS; how=gadget). Ejecución remota no autenticada. ImagePath sin comillas CVE-2021-47874 (binPath ya entre comillas).
Remanentes del mismo pin: vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-service-sid, vfs-hook-impersonate.
Fijé VFSForGit master ab95cf51 tras el merge del 2026-09-28. La lista de omisión es CVE-2021-47874. Setup.iss ya pone comillas en binPath y cualifica {sys}\SC.EXE y {app}\gvfs.exe. PrepareToInstall todavía pasa un gvfs.exe desnudo a cmd.exe.
Caminos equivocados ya registrados: volver a reportar CVE-2021-47874; tratar la búsqueda solo en PATH de POSIX como el bug de Windows; afirmar que el remontaje también está sin cualificar. Teatro. Faltaba Windows nativo, así que el lab es un gadget de ExecWithResult más la búsqueda CWD-then-PATH de cmd.
python3 vfs-install-cwd-Abraxas-Labs.py
o
cd lab
./run.sh
Gadget HTTP en 127.0.0.1:19680. Testigo VFS-INSTALL-CWD-WITNESS. La última línea 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') cuando esté presente; de lo contrario, omitir la consulta de list-mounted en la primera instalación. Nunca pasar un gvfs.exe desnudo a cmd.exe. Cualificar UnmountRepos de la misma manera.
ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3aSetup.iss PrepareToInstall / UnmountRepos / {sys}\SC.EXE / {app}\gvfs.exeImagePath sin comillasGNU Affero GPL v3.0. Ver LICENSE. Solo lab en loopback. Sin garantía.