دليل النشر

n8n CVE-2026-21877: تصحيح ثغرة RCE بدرجة 9.9 عاجلاً

انشر على VPS Cloud ←

دليل عملي

n8n CVE-2026-21877: تصحيح ثغرة RCE بدرجة 9.9 عاجلاً

الأمان والمراقبة10 دقائق للقراءةعدد الخطوات: 8

‏تنبيه CERT‏ كندا AL26-001 الصادر في 12 يناير 2026 يكشف عن ثلاث ثغرات نشطة في n8n. أخطرها CVE-2026-21877 ‏(CVSS‏ 9.9) التي تسمح لمستخدم مصادق بتنفيذ كود عشوائي على الخادم عبر عقدة Git. كل نسخة مستضافة ذاتياً دون التحديث مكشوفة للخطر. يشرح هذا الدليل إجراء التحديث والتحقق بعده وحل مشكلة الجدولة التي ظهرت في الإصدار 2.21.7.

المحتويات· CVE-2026-21877: لماذا درجة CVSS‏ 9.9 مبررة1/9
  1. 01CVE-2026-21877: لماذا درجة CVSS‏ 9.9 مبررة
  2. 02من هو معرض للخطر وفي أي نطاق من الإصدارات
  3. 03التحقق من إصدار نسخة n8n الخاصة بك
  4. 04إجراء التحديث إلى n8n‏ ≥ 1.121.3
  5. 05التصليب بعد التحديث: تقليص سطح الهجوم
  6. 06خطأ الجدولة بعد الإصدار 2.21.7: الأعراض والحل المؤقت
  7. 07التحققات بعد الترحيل: ما يجب مراجعته قبل إعادة فتح الحركة
  8. 08إصدارات n8n: التعرض لثغرات تنبيه AL26-001
  9. 09الحفاظ على تحديث نسخة n8n: المسار على VPS

CVE-2026-21877: لماذا درجة CVSS‏ 9.9 مبررة

‏تُصنَّف الثغرة ضمن CWE-434 — رفع ملف بنوع خطير دون قيود. تتيح عقدة Git في n8n، في ظروف معينة، لمستخدم مصادق كتابة ملف عشوائي على نظام ملفات الخادم. يستطيع المهاجم كتابة سكريبت في مسار ينفذه عملية n8n ثم تشغيله عبر سير عمل لتحقيق تنفيذ كود عن بُعد.

‏ناقل الهجوم شبكي ولا يتطلب أي تفاعل إضافي من المستخدم. النطاق يتغير (scope: Changed) مما يعني أن الأثر يتجاوز عملية n8n: السرية والسلامة والتوافر للخادم كلها معرضة للاختراق. بلغت درجة EPSS‏ 5.449% (البيرسنتيل 92) مما يدل على احتمال عالٍ للاستغلال الفعلي خلال 30 يوماً.

‏يشمل التنبيه AL26-001 أيضاً CVE-2026-21858 ‏(تحقق غير كافٍ للمدخلات في طلبات webhook، CVSS‏ 10.0 وفق بعض المصادر) و‏CVE-2025-68613 ‏(عزل غير كافٍ للتعبيرات في إعدادات سير العمل). يجب معالجة الثلاث ضمن نطاق تصحيح واحد.

من هو معرض للخطر وفي أي نطاق من الإصدارات

  • جميع نسخ n8n المستضافة ذاتياً من 0.123.0 وحتى ما دون 1.121.3 معرضة لـ CVE-2026-21877 وفق التنبيه GHSA-v364-rw7m-3263 على GitHub.
  • النسخ خلف وكيل عكسي ليست محمية: الثغرة تستلزم مصادقة فحسب — حساب مخترق أو موظف داخلي ضار يكفي؛ محيط الشبكة لا يغير نطاق التعرض.
  • كلا نشري Docker و‏npm متأثران: الناقل هو عقدة Git الموجودة في جميع توزيعات n8n بصرف النظر عن طريقة التثبيت.
  • نسخ n8n Cloud المُدارة من n8n.io تلقت التحديث دون الحاجة إلى أي إجراء من المشغل.
  • CVE-2025-68613 تغطي الإصدارات من 0.211.0 حتى ما دون 1.120.4: إذا لم تبلغ 1.120.4 بعد، فأنت معرض لثغرتين في آن.
  • CVE-2026-21858 تؤثر في الإصدارات من 1.65.0 حتى ما دون 1.121.0: التحديث إلى 1.121.3 يعالج الثلاث دفعة واحدة.
  • درجة EPSS‏ 5.449% تضع هذه الثغرة في البيرسنتيل 92 من احتمالية الاستغلال الفعلي، مما يبرر إعطاءها الأولوية على سائر أعمال الصيانة المجدولة.

التحقق من إصدار نسخة n8n الخاصة بك

‏قبل تطبيق التحديث، حدد الإصدار الحالي بدقة. ثلاث طرق حسب سياق نشرك.

عبر واجهة الويب: سجّل الدخول إلى نسختك، انقر أيقونة الملف الشخصي في أسفل اليسار ثم "About n8n". يظهر الإصدار في النافذة المنبثقة.

عبر Docker: الأمر docker inspect <container-name> --format '{{index .Config.Labels "org.opencontainers.image.version"}}' يعيد إصدار الصورة الجارية. إذا بُدئ الحاوي من صورة n8nio/n8n:latest، تعكس هذه القيمة ما كان حالياً وقت آخر docker pull.

عبر واجهة API الداخلية: curl http://localhost:5678/healthz على الخادم المضيف يعيد {"status":"ok"} مع الإصدار في الترويسات إذا كانت النسخة تعمل.

إذا كان إصدارك دون 1.121.3، طبّق الإجراء أدناه دون انتظار نافذة الصيانة القادمة.

إجراء التحديث إلى n8n‏ ≥ 1.121.3

  1. نسخ احتياطي لقاعدة البيانات وملفات الإعداد

    ‏قبل أي تحديث، احتفظ بنسخة احتياطية من الحالة الحالية. لتثبيت Docker Compose، صدّر قاعدة بيانات SQLite‏ أو PostgreSQL‏ حسب إعدادك:

    # SQLite (المسار الافتراضي)
    cp ~/.n8n/database.sqlite ~/.n8n/database.sqlite.bak-$(date +%Y%m%d)
    
    # PostgreSQL
    pg_dump -U n8n -d n8n > n8n-backup-$(date +%Y%m%d).sql

    ‏انسخ أيضاً ملف docker-compose.yml وملف .env إلى مسار احتياطي.

  2. تحديث ملف docker-compose.yml

    ‏إذا كنت تستخدم صورة n8nio/n8n:latest، لا تعديل مطلوب على ملف docker-compose.yml. إذا ثبّتَّ إصداراً محدداً (مثل n8nio/n8n:1.115.0)، حدّث سطر image:

    services:
      n8n:
        image: n8nio/n8n:1.121.3

    ‏لمتابعة الفرع الثابت طويل الأمد، يُفضَّل استخدام وسم إصدار صريح بدلاً من latest للتحكم في نوافذ التحديث.

  3. سحب الصورة الجديدة

    ‏من المسار الذي يحتوي docker-compose.yml:

    docker compose pull

    ‏يُنزّل هذا الأمر الطبقات التي تغيرت فقط. على رابط بسرعة 100 ميجابت/ث، توقع من 30 إلى 90 ثانية حسب ذاكرة التخزين المؤقت المحلية.

  4. إيقاف النسخة الحالية

    docker compose down

    ‏الإيقاف مُنظَّم: ينتظر n8n انتهاء التنفيذات الجارية قبل التوقف، ما لم تضف --timeout 0. على نسخة مرتفعة الحمل، يُفضَّل انتظار إتمام سير العمل النشطة قبل تشغيل هذا الأمر، أو تعليق سير العمل الحرجة من الواجهة.

  5. إعادة التشغيل بالصورة الجديدة

    docker compose up -d

    ‏يستخدم Docker Compose الصورة المُنزَّلة حديثاً. يستغرق التشغيل عادةً 10 إلى 20 ثانية. يجب أن يُظهر سجل التشغيل الإصدار 1.121.3 أو أحدث.

  6. التحقق من الإصدار المُنشَر

    docker compose logs n8n | grep -i 'version\|n8n@'

    ‏أو عبر API الداخلية من الخادم المضيف:

    curl -s http://localhost:5678/healthz

    ‏تأكد أن الإصدار المعروض في الواجهة (أيقونة الملف الشخصي ← About n8n) هو 1.121.3 أو أعلى قبل اعتبار التحديث مكتملاً.

  7. تعطيل عقدة Git إذا لم تكن تستخدمها

    ‏لتحييد ناقل الهجوم فوراً دون انتظار التحديث (مثلاً إذا تعذرت نافذة الصيانة)، عطّل عقدة Git عبر متغير البيئة:

    N8N_NODES_EXCLUDE='["n8n-nodes-base.git"]'

    ‏أضف هذا المتغير إلى ملف .env وأعد تشغيل النسخة. هذا ليس بديلاً عن التحديث: طبّق التحديث في أقرب وقت.

  8. لتثبيت npm (بدون Docker)

    npm update -g n8n
    # أو عند استخدام مدير عمليات:
    pm2 stop n8n
    npm update -g n8n
    pm2 start n8n

    ‏تحقق من الإصدار المثبت بـ n8n --version. يُوصى بالانتقال إلى Docker للتثبيتات الجديدة — الدليل المخصص n8n-migration-npm-docker-avant-v3 يغطي هذا المسار بالتفصيل.

التصليب بعد التحديث: تقليص سطح الهجوم

‏التحديث يصحح الثغرة المعروفة، لكن عدة إعدادات تعزز الوضع الأمني العام للنسخة.

قيّد صلاحيات عملية n8n. يجب ألا يعمل الحاوي بصلاحيات root. الصورة الرسمية تستخدم المستخدم node افتراضياً منذ عدة إصدارات — تحقق من أن docker-compose.yml لا يحتوي user: root.

فعّل المصادقة. إذا كانت نسختك مكشوفة على الإنترنت بلا مصادقة، أضف N8N_BASIC_AUTH_ACTIVE=true مع بيانات اعتماد قوية، أو ضع النسخة خلف وكيل يتطلب المصادقة. CVE-2026-21877 تستلزم مصادقة، لكن ناقلات غير مصادق عليها أخرى موجودة في البيئة.

قيّد العقد المسموح بها. متغير N8N_NODES_INCLUDE يتيح تفعيل مجموعة فرعية فقط من العقد. على النسخ المخصصة لسير عمل لا تحتاج Git أو وصولاً للنظام، تقليص القائمة يضيّق السطح.

راجع حسابات المستخدمين. في واجهة الإدارة، تحقق من مشروعية كل حساب نشط وتعطيل حسابات الاختبار وحسابات المتعاونين السابقين.

اشترك في تنبيهات أمان n8n. مستودع GitHub‏ n8n-io/n8n يتيح الاشتراك في إشعارات الأمان عبر "Watch → Security alerts".

خطأ الجدولة بعد الإصدار 2.21.7: الأعراض والحل المؤقت

‏توثّق المسألة #31100 على GitHub سلوكاً أُبلغ عنه بعد التحديث إلى الإصدار 2.21.7: سير عمل ذات مشغّلات مجدولة (عقدة Schedule Trigger) تتوقف عن التنفيذ في موعدها دون أي رسالة خطأ في السجلات.

العرض الدقيق: تبقى سير العمل في حالة "نشطة" في الواجهة ويُعرض موعد المشغّل التالي، لكن التنفيذات لا تحدث. لا يُظهر سجل التنفيذات أي محاولة فاشلة — سير العمل ببساطة لا تُشغَّل. يُلاحَظ هذا السلوك أساساً في نشريات وضع الطابور (متعدد العمال) مع PostgreSQL، لكنه قد يؤثر في نسخ أحادية العملية أيضاً.

ما تشير إليه المسألة بشأن الحل المؤقت: وقت نشر هذا المقال، مُصنَّفة المسألة "Needs Feedback" من فريق n8n ولم يُنشر حل مؤقت رسمي موثق في الخيط. أفاد عدة مشغّلين بأن الإجراءات التالية أعادت التنفيذات المجدولة في بيئتهم:

‏- تعطيل ثم إعادة تفعيل كل سير عمل متأثرة يدوياً من الواجهة (مفتاح Active/Inactive).
‏- إعادة تشغيل حاوي n8n أو الخدمة لإعادة تهيئة طابور الجدولة الداخلي.
‏- في نشريات وضع الطابور: إعادة تشغيل العقدة الرئيسية (main) أولاً قبل العمال.

‏هذه الإجراءات ليست إصلاحاً: قد تتكرر المشكلة. تابع المسألة #31100 للاطلاع على الحالة الرسمية وإصدار الإصلاح.

تحديد سير العمل المتأثرة بسرعة: في واجهة n8n، صفّ سجل التنفيذات حسب مشغّل "Schedule" وابحث عن التنفيذات الغائبة في الفترة المتوقعة. سير عمل كان يفترض تشغيلها عشر مرات منذ منتصف الليل دون أي أثر في السجل هو إشارة واضحة.

التحققات بعد الترحيل: ما يجب مراجعته قبل إعادة فتح الحركة

‏تحديث n8n الناجح يُؤكَّد على عدة محاور، ليس فقط الإصدار المعروض.

الإصدار: تُظهر واجهة "About n8n" الإصدار 1.121.3 أو أعلى. أمر docker inspect على الصورة الجارية يعيد نفس الرقم.

سلامة بيانات الاعتماد: يشفّر n8n بيانات الاعتماد بمفتاح مشتق من N8N_ENCRYPTION_KEY. إذا لم يتغير هذا المتغير بين الإصدارين، بيانات الاعتماد الموجودة سليمة. افتح سير عمل يستخدم اتصالاً خارجياً وتحقق من تنفيذه دون أخطاء فك تشفير.

سير العمل النشطة: في لوحة التحكم، تحقق من أن عدد سير العمل النشطة يطابق الحالة قبل التحديث. سير عمل كانت نشطة وأصبحت غير نشطة بعد إعادة التشغيل إشارة تحذير.

التنفيذات المجدولة: إذا كانت نسختك تستخدم عقد Schedule Trigger، انتظر موعد التشغيل التالي وأكد التنفيذ في السجل. إذا كنت على الإصدار 2.21.7 من الفرع 2.x، راجع القسم السابق حول خطأ الجدولة.

سجلات التشغيل: docker compose logs n8n --tail 50 يجب أن يُظهر تشغيلاً نظيفاً بلا استثناءات. أخطاء الاتصال بقاعدة البيانات أو فك تشفير بيانات الاعتماد تظهر في هذه السطور الأولى.

الوصول الشبكي: إذا كانت نسختك مكشوفة عبر وكيل عكسي، تحقق من استجابة مسارات /webhook/ و/webhook-test/ بشكل صحيح بعد التحديث.

إصدارات n8n: التعرض لثغرات تنبيه AL26-001

مرّر الجدول أفقيًا

الإصدارCVE-2025-68613CVE-2026-21858CVE-2026-21877الإجراء المطلوب
< 1.120.4معرضمعرضمعرضالتحديث إلى ≥ 1.121.3
1.120.4 – 1.120.xمُصلَحمعرضمعرضالتحديث إلى ≥ 1.121.3
1.121.0 – 1.121.2مُصلَحمُصلَحمعرضالتحديث إلى ≥ 1.121.3
≥ 1.121.3مُصلَحمُصلَحمُصلَحلا إجراء مطلوب للثغرات
2.x < 2.21.7راجع ملاحظات الإصدارراجع ملاحظات الإصدارراجع ملاحظات الإصدارراجع ملاحظات إصدار 2.x
2.21.7+راجع ملاحظات الإصدارراجع ملاحظات الإصدارراجع ملاحظات الإصدارخطأ الجدولة #31100 نشط

الحفاظ على تحديث نسخة n8n: المسار على VPS

‏تكشف CVE-2026-21877 عن تكلفة نسخة مستضافة ذاتياً يعتمد تحديثها على نافذة صيانة خارجية. على VPS بوصول root، docker compose pull && docker compose up -d يطبّق التحديث في أقل من عشر دقائق دون الاعتماد على مزوّد لتحديد الموعد.

‏تأتي هذه الاستقلالية بمسؤولية: متابعة التنبيهات الأمنية تقع على المشغّل. مصدران لمتابعة n8n: مستودع GitHub‏ (تبويب Security مع تفعيل الإشعارات) وتنبيهات المركز الكندي للأمن السيبراني أو ما يعادله من مراكز CERT في منطقتك.

‏للمزيد حول بناء نسخة n8n متينة — التثبيت الأولي ووكيل Caddy أو nginx العكسي و‏TLS التلقائي والنسخ الاحتياطي — راجع دليل تثبيت n8n على VPS. إذا كنت قادماً من تثبيت npm وتفكر في الانتقال إلى Docker قبل الانتقال إلى الفرع 2.x، يغطي دليل الانتقال من npm إلى Docker قبل v3 هذا المسار. نمط التحديث المطبق هنا مطابق للموثق في CVE-2026-6471 على PostgreSQL.

VPS بوصول root لتطبيق تحديثاتك متى تشاء

‏على VPS من ServOrbit، `docker compose pull && docker compose up -d` يُنجَز في أقل من عشر دقائق. لا اعتماد على مزوّد لنافذة الصيانة.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة