Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
vfs-hook-impersonate — VFS para Git ab95cf51 - Alta - Local - Resto de privilegios - hook CreateFileW SecurityImpersonation | Kitploit
Herramientas/GitHubGitHub/abraxas/vfs-hook-impersonate
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónPruebas de PenetraciónPapers e InvestigaciónRed TeamingLabs y Práctica
GitHubabraxas/vfs-hook-impersonate

vfs-hook-impersonate

VFS para Git ab95cf51 - Alta - Local - Resto de privilegios - hook CreateFileW SecurityImpersonation

Ver Repositorio
5hace 4 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Abraxas Labs - vfs-hook-impersonate

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

vfs-hook-impersonate

Clase: Privilegio residual Alcance: Local

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

Los hooks nativos de git (read-object, virtual-filesystem, post-index-changed) abren la tubería de montaje por enlistment con CreateFileW y dwFlagsAndAttributes = 0. Eso omite SECURITY_SQOS_PRESENT, por lo que Windows establece por defecto el cliente en SecurityImpersonation. La misma ACL de la tubería que usa el residual #2 otorga a BUILTIN\Users ReadWrite | CreateNewInstance.

Un segundo usuario local puede crear una instancia adicional u ocupar \\.\pipe\GVFS_<ENLISTMENT>, ImpersonateNamedPipeClient, y escribir como la víctima.

IDsin CVE todavía
ClasePrivilegio residual (suplantación de named-pipe)
AlcanceLocal
CWECWE-284, CWE-300
CVSSAlto: 7.1 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProductoVFS for Git
Afectadomaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a (también actual frente a la release v2.0.26259.1). Solo Windows.
AuthLocal. La víctima tiene un enlistment de GVFS. El atacante es cualquier principal de BUILTIN\Users. La víctima ejecuta git después.
LicenciaGNU Affero GPL v3.0
LabSolo 127.0.0.1. how=gadget (sin VM Windows en vivo / VFS for Git instalado).

Esto es local. No es SYSTEM. Automount en el residual #4 es una tubería distinta (GVFS.Service.pipe). Dehydrate/unmount en esta misma tubería de montaje es el residual #2.

Qué puede hacer un atacante

La víctima tiene un enlistment de GVFS. El atacante es cualquier principal de BUILTIN\Users. La víctima ejecuta git después (status, checkout, cualquier cosa que dispare los hooks de VFS).

PrivilegioMétodo / sinkQué otorgaRecon / integridad / disponibilidadProbado en lab o inferido
Suplantar a la víctima y escribir en su perfilInstancia adicional / ocupar \\.\pipe\GVFS_C_\REPOS\FOO; hook CreateFileW flags=0; ImpersonateNamedPipeClient; crear %USERPROFILE%\VFS-HOOK-IMPERSONATE-WITNESSEscribir como el UID de la víctimaIntegridadProbado en lab sobre un gadget. El propietario del witness es el uid de la víctima. Los flags por defecto son SecurityImpersonation. El uid del atacante no puede escribir ese home sin suplantación
Mantener git funcionando tras la ocupaciónResponder S|\x03 a MPL|1 para que GVFS.VirtualFileSystemHook no se cuelgueGit continúaDisponibilidad del git de la víctimaProbado en lab. Hook reply_ok tanto en rutas vulnerables como parcheadas
Adivinar el nombre de la tubería desde la raíz del enlistmentGetGVFSPipeName recorre el CWD hasta .gvfs, CharUpper, : -> _, prefijo \\.\pipe\GVFS_Nombre IPC adivinableReconProbado en lab. C:\Repos\Foo\src -> \\.\pipe\GVFS_C_\REPOS\FOO
Redirigir la tubería sin ganar la instancia activaPlantar un directorio src\.gvfs rastreado para que el walk-up enlace un nombre distintoOcupación sin competir con el montajeIntegridadInferido de common.windows.cpp walk-up. El lab usó el .gvfs real del enlistment
Responder DLO / PICN además de MPLMisma tubería, ReadObjectHook / PostIndexChangedHookMentir sobre objetos / skip-worktreeIntegridadInferido. El lab envió solo MPL|1
Provocar el crash del hook con un S\x03 de dos bytesVirtualFileSystemHook messageLength -= 2 luego -= 1 desborda y hace fwrite de ~4GiBCrash / lectura OOBDisponibilidadInferido de main.cpp 69-90. No es el oráculo. No enviar ese crash

Descartado aquí: SYSTEM (el montaje es del usuario del enlistment). RCE remoto no autenticado. VM Windows en vivo / VFS for Git instalado (este lab es un gadget de las funciones copiadas).

Residuales del mismo pin: vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-service-sid, vfs-install-cwd.

Cómo lo encontré

Fijé VFSForGit master ab95cf51 tras el merge del 2026-09-28. Los hooks nativos hacen CreateFileW con flags 0. Windows entonces usa SecurityImpersonation por defecto. La tubería de montaje ya permite a Users crear una instancia adicional. Ese es el residual.

Caminos equivocados ya registrados: tratar esto como el dehydrate del residual #2 (misma ACL, sink distinto: token, no MoveDirectory); afirmar SYSTEM; enviar el underflow de 4GiB como el oráculo. Teatro. Faltaba Windows nativo, así que el lab es un gadget de esas funciones. Los sockets Unix sustituyen a los named pipes.

Lab

python3 vfs-hook-impersonate-Abraxas-Labs.py

o

cd lab
./run.sh

Gadget HTTP en 127.0.0.1:19670. Copia GetGVFSPipeName, los flags de CreatePipeToGVFS, la ACL CreateNewInstance de Users, y el protocolo de hook MPL|1 / S|. Un cliente parcheado con identificación SQOS no escribe el witness. La última línea usa how=gadget.

SUCCESS vfs-hook-impersonate how=gadget createfile-flags=0 impersonation=SecurityImpersonation extra-instance=yes owner=victim patched-sqos-ident-no-write=yes VFS-HOOK-IMPERSONATE-WITNESS

La solución

En el hook CreateFileW pasar SECURITY_SQOS_PRESENT | SECURITY_IDENTIFICATION. Restringir CreatePipeByName al SID del propietario del enlistment más LocalSystem. Eliminar CreateNewInstance para Users. Verificar los límites de longitud de las respuestas del hook.

Referencias

  • github.com/microsoft/VFSForGit master ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a
  • common.windows.cpp CreatePipeToGVFS
  • WindowsPlatform.cs CreatePipeByName
  • CWE-284 · CWE-300

Licencia

GNU Affero GPL v3.0. Ver LICENSE. Solo lab en loopback. Sin garantía.

Descargar herramienta