Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
vfs-mount-dehydrate — VFS per Git ab95cf51 - Alto - Locale - Privilegio residuo - Gli utenti montano pipe dehydrate/unmount | Kitploit
Strumenti/GitHubGitHub/abraxas/vfs-mount-dehydrate
Escalation di PrivilegiAnalisi delle VulnerabilitàExploit
GitHubabraxas/vfs-mount-dehydrate

vfs-mount-dehydrate

VFS per Git ab95cf51 - Alto - Locale - Privilegio residuo - Gli utenti montano pipe dehydrate/unmount

Vedi Repository
54 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Abraxas Labs - vfs-mount-dehydrate

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

vfs-mount-dehydrate

Classe: Privilegio residuo Portata: Locale

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

CreatePipeByName sulla pipe di mount per-enlistment concede a BUILTIN\Users ReadWrite | CreateNewInstance. Non c'è alcun controllo del SID del proprietario né ImpersonateNamedPipeClient. HandleDehydrateFolders esegue Path.Combine sui nomi di cartella controllati dall'attaccante e li passa a git tramite ProcessStartInfo.Arguments. Il percorso dehydrate della CLI esegue IsFolderValid. Il gestore del mount no.

Chiunque nel gruppo Users che riesca a indovinare \\.\pipe\GVFS_<ENLISTMENT> può smontare ProjFS, spostare directory come l'utente del mount e forzare git reset HEAD --hard.

IDnessuna CVE al momento
ClassePrivilegio residuo (ACL named-pipe) / path traversal / argument injection
PortataLocale
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
ProdottoVFS for Git
Affettomaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a; tag dell'installer v2.0.26229.1 / v2.0.26259.1. Solo Windows.
AuthLocale. Qualsiasi principal BUILTIN\Users mentre la vittima ha un mount
LicenzaGNU Affero GPL v3.0
LabSolo 127.0.0.1. how=gadget (nessuna VM Windows / ProjFS live).

Protocollo della pipe: UTF-8 Header o Header|body, terminato dal byte 0x03. Il nome della pipe è GVFS_ + la root dell'enlistment in maiuscolo con : sostituito da _ (esempio C:\Repos\Foo -> \\.\pipe\GVFS_C_\REPOS\FOO).

Cosa può fare un attaccante

La vittima ha gvfs mount su una root nota. L'attaccante è un altro principal Users sulla stessa macchina. Integrità e disponibilità come la vittima. Non SYSTEM. Non una shell di per sé.

PrivilegioMetodo / sinkCosa concedeRecon / integrità / disponibilitàProvato in lab o dedotto
Connettersi alla pipe di mount della vittimaACL di CreatePipeByName BuiltinUsers ReadWrite | CreateNewInstance; nessun controllo del proprietarioParlare con l'IPC del mountRecon della pipeProvato in lab (ACL del gadget). SID dell'attaccante accettato; la modalità solo-proprietario restituisce connect-denied
Leggere il percorso dell'enlistment, il percorso della cache, RepoUrlGetStatusTrapelare la root usata per il residuo #1 / #4ReconProvato in lab. Il JSON di stato includeva RepoUrl e GVFS_C_\REPOS\FOO
Smontare ProjFS e uscire da gvfs.mountmessaggio UnmountMettere giù l'enlistmentDisponibilitàProvato in lab. Risponde Ack poi Complete; stato del mount Unmounted
Smontare su un errore di parsingReleaseLock con body vuoto -> RequestData == null -> UnmountAndStopWorkingDirectoryCallbacks + Environment.ExitStesso unmount più l'uscita del processoDisponibilitàProvato in lab. ReleaseLock| vuoto ha smontato
Scartare il working tree della vittimaDehydrate|{"Folders":"--hard",...}. movedFolders.Add anche se la directory sorgente manca. Reset("HEAD", "\"--hard\" ") diventa git reset HEAD --hard dopo la rimozione delle virgoletteDistruggere file tracciati modificatiIntegrità / disponibilitàProvato in lab. Il file tracciato modificato ha perso la stringa witness
Spostare una cartella fuori dal worktree come la vittimaPath.Combine(WorkingDirectoryBackingRoot, folder) + MoveDirectory verso BackupFolderPathRubare / ricollocare una cartella del worktreeIntegritàProvato in lab. keepme ha lasciato src ed è apparso sotto il percorso di backup dell'attaccante
Attraversare .. (la IsFolderValid della CLI non viene usata)stesso Combine; ..\secretSpostare una cartella sorella su cui l'utente del mount può scrivereIntegritàProvato in lab. La cartella sorella secret è finita sotto il percorso di backup dell'attaccante. Applicare IsFolderValid l'ha bloccato
Rubare o distruggere altre directory scrivibili dalla vittimastesso move con una catena ..\ che risolve fuori dall'enlistmentSpostamento più ampio come l'utente del mountIntegritàDedotto da Combine. Questo lab usa solo un albero usa-e-getta
Esecuzione di codice come la vittimaquesta pipeCreazione di processo di un'immagine dell'attaccanteIntegritàChiuso. Nessuna creazione di processo di un'immagine dell'attaccante su questo residuo (vedi vfs-service-sid e vfs-hook-impersonate)
SYSTEMIPC del mountLocalSystemIntegritàChiuso. Il mount gira come l'utente dell'enlistment

--hard non è un percorso ... La IsFolderValid della CLI lo consente comunque. Una correzione deve anche rifiutare nomi di cartella che sembrano opzioni.

Altri residui dello stesso pin: vfs-quote-breakout, vfs-clone-acl, vfs-service-sid, vfs-hook-impersonate, vfs-install-cwd.

Come l'ho trovato

Ho fissato VFSForGit master ab95cf51 dopo il merge del 2026-09-28. La pipe del servizio e la pipe di mount per-enlistment condividono CreatePipeByName. Il dehydrate sulla CLI valida le cartelle. Il gestore del mount no.

Vicoli ciechi già registrati: trattare --hard come un path traversal (è argument injection dopo la rimozione delle virgolette); rivendicare SYSTEM; una reverse shell. Teatro. Mancava un Windows nativo, quindi il lab è un gadget di quelle funzioni più un albero git usa-e-getta.

Lab

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

oppure

cd lab
./run.sh

Gadget HTTP su 127.0.0.1:19640 che parla la forma dei messaggi della pipe. Albero git usa-e-getta dentro il container. Nessuna reverse shell. Nessun percorso di profilo reale. L'ultima riga 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 correzione

Limitare CreatePipeByName al SID del proprietario dell'enlistment più LocalSystem. Rimuovere CreateNewInstance per Users. Impersonare il client e richiedere il proprietario. Replicare IsFolderValid in HandleDehydrateFolders e rifiutare i nomi che sembrano opzioni di git. Non trattare un errore di parsing di ReleaseLock come uscita del processo.

Riferimenti

Scarica lo strumento