
دراسة تقنية لثغرة CVE-2025-68613 في n8n، تغطي الإصدارات المتأثرة، وسيناريو الاستكشاف المخبري، والتحليل الهجومي والدفاعي، واستراتيجيات التخفيف.
n8n هي منصة أتمتة سير العمل تُستخدم لدمج الأنظمة والخدمات من خلال تدفقات مرئية وتعبيرات JavaScript.
CVE-2025-68613 هي ثغرة حرجة لتنفيذ التعليمات البرمجية عن بُعد (RCE)، بتقييم CVSS 9.9، تؤثر على إصدارات متعددة من n8n. تحدث الثغرة في معالجة تعبيرات JavaScript في سير العمل في الإصدارات المصابة التي لا تكون معزولة بشكل صحيح. وهذا يسمح للمستخدمين المُصادَق عليهم الذين يمتلكون صلاحيات التحرير بتنفيذ تعليمات برمجية خارج السلوك المتوقع للتطبيق.
عمليًا، يمكن استغلال هذه الثغرة لتشغيل أوامر على الخادم الذي يعمل عليه n8n، باستخدام صلاحيات التطبيق نفسه. تتراوح الإصدارات المتأثرة من 0.211.0 حتى الإصدارات السابقة للإصلاحات المطبقة في 1.120.4 و1.121.1 و1.122.0.
يوثّق هذا المستودع CVE-2025-68613 تقنيًا، ويغطي سياق الثغرة والإصدارات المتأثرة والاستغلال وتدابير التخفيف الموصى بها.

| الحالة | إصدار n8n | ملاحظة |
|---|---|---|
| ❌ متأثر | >= 0.211.0 | إدخال الآلية المصابة |
| ❌ متأثر | < 1.120.4 | مصاب حتى التصحيح في الفرع 1.120 |
| ❌ متأثر | < 1.121.1 | مصاب حتى التصحيح في الفرع 1.121 |
| ❌ متأثر | < 1.122.0 | مصاب حتى التصحيح في الفرع 1.122 |
| ✅ مُصلَّح | 1.120.4 | تم تطبيق الإصلاح الرسمي |
| ✅ مُصلَّح | 1.121.1 | تم تطبيق الإصلاح الرسمي |
| ✅ مُصلَّح | >= 1.122.0 | الإصلاح مُضمَّن افتراضيًا |
يُوصى بالتحديث فورًا إلى الإصدار 1.122.0 أو أعلى.
لإثبات الثغرة، تُشترط الشروط التالية:
تحدث الثغرة أثناء إنشاء وتنفيذ سير العمل، وليس قبل المصادقة.
الخطوة الأولى هي تسجيل الدخول إلى واجهة n8n على الويب بمستخدم صالح.

تؤكد هذه الخطوة أن الهجوم ليس مجهولًا. تتطلب الثغرة مستخدمًا مُصادَقًا عليه.
بعد تسجيل الدخول، تحقق من أن المستخدم يمتلك صلاحيات إنشاء وتحرير سير العمل.

هذا ذو صلة لأن المستخدمين الذين يمتلكون هذا المستوى من الوصول فقط يمكنهم إدراج تعبيرات ديناميكية في سير العمل.
باستخدام المستخدم المُصادَق عليه، أنشئ سير عمل جديدًا من الصفر.

هنا يبدأ الاستخدام المشروع لوظيفة n8n التي، في الإصدارات المصابة، يمكن استغلالها.
أول عقدة تُضاف إلى سير العمل هي المشغّل اليدوي (Manual Trigger).

ما تفعله هذه العقدة: تسمح بالتنفيذ اليدوي لسير العمل، وتُستخدم كنقطة انطلاق للتدفق.
في هذا السيناريو، تعمل فقط كنقطة دخول لتنفيذ سير العمل.
العقدة الثانية التي تُضاف هي Edit Fields (Set).

ما تفعله هذه العقدة: تسمح هذه العقدة بإنشاء حقول البيانات أو تعديلها أو الكتابة فوقها داخل سير العمل. وهي تقبل قيمًا ثابتة أو تعبيرات JavaScript تُقيَّم في وقت التنفيذ.
عند هذه النقطة تحديدًا تتجلى الثغرة.
داخل حقل القيمة في عقدة Edit Fields (Set)، أدرج تعبير JavaScript مُغلَّفًا بـ {{ }}، وهو التنسيق الذي يستخدمه n8n لتقييم التعبيرات الديناميكية.

مثال الحمولة:
{{ (function(){
return this.process.mainModule
.require('child_process')
.execSync('id')
.toString()
})() }}
(function(){ ... })(): يُعرّف دالة ذاتية الاستدعاء، مما يسمح بتغليف كل المنطق وإرجاع قيمة مباشرة إلى تعبير سير العمل.this.process: يصل إلى كائن process الداخلي في Node.js، الذي يكشف معلومات وموارد وقت التشغيل.process.mainModule: يسمح بالوصول إلى الوحدة الرئيسية للتطبيق، مما يتيح تحميل وحدات Node.js الداخلية الأخرى.require('child_process'): وحدة Node.js أصلية تسمح بإنشاء عمليات جديدة على نظام التشغيل وتنفيذ أوامر خارجية.execSync('id'): ينفّذ أمرًا مباشرة على نظام التشغيل الذي يعمل عليه n8n، باستخدام صلاحيات عملية التطبيق..toString(): يحوّل مخرجات الأمر المنفَّذ إلى نص، مما يسمح بعرض النتيجة في واجهة n8n.تؤكد النتيجة المعروضة أن الأمر نُفِّذ على نظام التشغيل باستخدام صلاحيات عملية n8n، وهو ما يمثل تنفيذ التعليمات البرمجية عن بُعد (RCE).