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-mount-dehydrate — VFS para Git ab95cf51 - Alta - Local - Privilegio residual - Los usuarios montan pipe dehydrate/unmount | Kitploit
Herramientas/GitHubGitHub/abraxas/vfs-mount-dehydrate
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotación
GitHubabraxas/vfs-mount-dehydrate

vfs-mount-dehydrate

VFS para Git ab95cf51 - Alta - Local - Privilegio residual - Los usuarios montan pipe dehydrate/unmount

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-mount-dehydrate

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

vfs-mount-dehydrate

Clase: Privilegio residual Alcance: Local

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

CreatePipeByName en la tubería de montaje por enlistment otorga a BUILTIN\Users ReadWrite | CreateNewInstance. No hay verificación del SID del propietario ni ImpersonateNamedPipeClient. HandleDehydrateFolders aplica Path.Combine a nombres de carpeta del atacante y los pasa a git mediante ProcessStartInfo.Arguments. La ruta de dehydrate de la CLI ejecuta IsFolderValid. El manejador del montaje no.

Cualquiera en Users que pueda adivinar \\.\pipe\GVFS_<ENLISTMENT> puede desmontar ProjFS, mover directorios como el usuario del montaje y forzar git reset HEAD --hard.

IDaún sin CVE
ClasePrivilegio residual (ACL de named-pipe) / path traversal / inyección de argumentos
AlcanceLocal
CWECWE-284, CWE-22, CWE-88
CVSSAlto: 7.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
ProductoVFS for Git
Afectadomaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a; tags del instalador v2.0.26229.1 / v2.0.26259.1. Solo Windows.
AuthLocal. Cualquier principal BUILTIN\Users mientras la víctima tiene un montaje
LicenciaGNU Affero GPL v3.0
LabSolo 127.0.0.1. how=gadget (sin VM de Windows / ProjFS en vivo).

Protocolo de la tubería: Header o Header|body en UTF-8, terminado por el byte 0x03. El nombre de la tubería es GVFS_ + la raíz del enlistment en mayúsculas con : reemplazado por _ (ejemplo C:\Repos\Foo -> \\.\pipe\GVFS_C_\REPOS\FOO).

Qué puede hacer un atacante

La víctima tiene gvfs mount en una raíz conocida. El atacante es otro principal de Users en la misma máquina. Integridad y disponibilidad como la víctima. No SYSTEM. No una shell por sí solo.

PrivilegioMétodo / sinkQué otorgaRecon / integridad / disponibilidadProbado en lab o inferido
Conectarse a la tubería de montaje de la víctimaACL de CreatePipeByName BuiltinUsers ReadWrite | CreateNewInstance; sin verificación de propietarioHablar el IPC del montajeRecon de la tuberíaProbado en lab (ACL del gadget). SID del atacante aceptado; el modo solo-propietario devuelve conexión denegada
Leer la ruta del enlistment, la ruta de caché, RepoUrlGetStatusFiltrar la raíz usada para el residual #1 / #4ReconProbado en lab. El JSON de estado incluía RepoUrl y GVFS_C_\REPOS\FOO
Desmontar ProjFS y salir de gvfs.mountmensaje UnmountTumbar el enlistmentDisponibilidadProbado en lab. Responde Ack y luego Complete; estado del montaje Unmounted
Desmontar ante un fallo de parseoReleaseLock con cuerpo vacío -> RequestData == null -> UnmountAndStopWorkingDirectoryCallbacks + Environment.ExitEl mismo desmontaje más la salida del procesoDisponibilidadProbado en lab. ReleaseLock| vacío desmontó
Descartar el árbol de trabajo de la víctimaDehydrate|{"Folders":"--hard",...}. movedFolders.Add incluso si el directorio origen no existe. Reset("HEAD", "\"--hard\" ") se convierte en git reset HEAD --hard tras eliminar las comillasDestruir archivos rastreados con cambiosIntegridad / disponibilidadProbado en lab. Un archivo rastreado con cambios perdió la cadena testigo
Mover una carpeta fuera del worktree como la víctimaPath.Combine(WorkingDirectoryBackingRoot, folder) + MoveDirectory a BackupFolderPathRobar / reubicar una carpeta del worktreeIntegridadProbado en lab. keepme salió del src y apareció bajo la ruta de backup del atacante
Recorrer .. (la CLI IsFolderValid no se usa)el mismo Combine; ..\secretMover un hermano sobre el que el usuario del montaje puede escribirIntegridadProbado en lab. El hermano secret acabó bajo la ruta de backup del atacante. Aplicar IsFolderValid lo bloqueó
Robar o destruir otros directorios escribibles por la víctimael mismo move con una cadena ..\ que resuelve fuera del enlistmentMovimiento más amplio como el usuario del montajeIntegridadInferido a partir de Combine. Este lab usa solo un árbol desechable
Ejecución de código como la víctimaesta tuberíaCreación de proceso de una imagen del atacanteIntegridadCerrado. Sin creación de proceso de una imagen del atacante en este residual (ver vfs-service-sid y vfs-hook-impersonate)
SYSTEMIPC del montajeLocalSystemIntegridadCerrado. El montaje se ejecuta como el usuario del enlistment

--hard no es una ruta ... La CLI IsFolderValid aún lo permite. Una corrección también debe rechazar nombres de carpeta que parezcan opciones.

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

Cómo lo encontré

Fijé VFSForGit master ab95cf51 tras el merge del 2026-09-28. La tubería del servicio y la tubería de montaje por enlistment comparten CreatePipeByName. Dehydrate en la CLI valida las carpetas. El manejador del montaje no.

Caminos equivocados ya registrados: tratar --hard como un path traversal (es inyección de argumentos tras eliminar las comillas); afirmar SYSTEM; una reverse shell. Teatro. Faltaba Windows nativo, así que el lab es un gadget de esas funciones más un árbol git desechable.

Lab

python3 vfs-mount-dehydrate-Abraxas-Labs.py

o

cd lab
./run.sh

Gadget HTTP en 127.0.0.1:19640 hablando la forma de mensaje de la tubería. Árbol git desechable dentro del contenedor. Sin reverse shell. Sin ruta de perfil real. La última línea usa how=gadget.

SUCCESS vfs-mount-dehydrate how=gadget unmount=yes reset-hard=yes dirty-gone=yes move-inside=yes move-dotdot=yes pipe-acl=users-no-owner is-folder-valid-not-on-pipe=yes VFS-MOUNT-DEHYDRATE-WITNESS

La corrección

Restringir CreatePipeByName al SID del propietario del enlistment más LocalSystem. Eliminar CreateNewInstance para Users. Suplantar al cliente y exigir propietario. Replicar IsFolderValid en HandleDehydrateFolders y rechazar nombres que parezcan opciones de git. No tratar un fallo de parseo de ReleaseLock como salida del proceso.

Referencias

Descargar herramienta