
إثبات مفهوم ومختبر لهروب من صندوق الحماية في n8n 2.42.0: عُقد Function/FunctionItem المخفية تنفّذ JavaScript في العملية الرئيسية، مما يمنح الأعضاء المُصادَق عليهم تنفيذ أوامر عن بُعد على المضيف.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · n8n-function-vm2
n8n 2.42.0 - n8n GmbH
GHSA-j4p8-h8mh-rh8q نقل n8n-nodes-base.code إلى العملية الفرعية JS task-runner. إضافة الإنتاج spawn تضيف --disallow-code-generation-from-strings و --disable-proto=delete. المتبقي هو العقد التي أخفوها بدلاً من نقلها. Function.node.ts هو hidden: true. وكذلك FunctionItem. وكذلك LangChain Code. إخفاء اللوحة هو علامة واجهة مستخدم. حفظ/استيراد Workflow JSON لا يزال يحل النوع. الافتراضي NODES_EXCLUDE هو فقط Execute Command و Local File Trigger. مسار التنفيذ هو vm2 NodeVM 3.12.2 داخل العملية في العملية الرئيسية لـ n8n.
عضو افتراضي يمكنه إنشاء workflow يمكنه تشغيل JS في العملية الرئيسية لـ n8n. الإخفاء ليس ACL.
| ID | لا يوجد CVE بعد |
| CWE | CWE-94، CWE-269 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| المنتج | n8n |
| المتأثر | حتى 2.42.0 (86c23326)؛ متبقي من GHSA-j4p8 |
| المصادقة | عضو مصادق عليه مع إنشاء/استيراد/تنفيذ workflow |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
كعضو افتراضي، استيراد أو إنشاء workflow الذي نوع العقدة فيه هو n8n-nodes-base.function (أو functionItem، أو @n8n/n8n-nodes-langchain.code) وتنفيذه. يعمل JS في العملية الرئيسية لـ n8n.
هذا RCE على المضيف بصلاحيات UID الخاص بـ n8n: أسرار المثيل، النص المشفر لبيانات اعتماد المستخدمين الآخرين على القرص، قاعدة البيانات. من عضو متعدد المستأجرين إلى الاستيلاء على المثيل. ليس OS LPE. ليس بدون مصادقة. Code v2 على نفس المثيل لا يرى process بهذه الطريقة.
نفس المنتج، متبقي شقيق: Databricks path join.
قرأت موجة GHSA في 16 سبتمبر 2026 أولاً، ثم عشر عمليات بحث على الوسم [email protected]. Expression sandbox، Code/Function/vm2، بيانات الاعتماد، webhooks، HTTP/SSRF، عقدة Git، الحزم المجتمعية، المصادقة/SSO، حقن العقد، API العام. معظم الثغرات العالية في تلك الموجة مغلقة على هذا الإصدار. Code لم يكن مكتملاً.
قواعد التغييرات الجذرية في v3 تشير بالفعل إلى أن Function / FunctionItem محذوفة. على 2.42.0 هي متبقية، وليست sandbox مقصوداً على المدى الطويل. Function أيضاً تحقن this.helpers، بما في ذلك helpers التي يسردها JS runner كغير مدعومة. لم أحتج إلى gadget vm2 عام لإثبات حدود العملية.
قمت بتشغيل n8nio/n8n:2.42.0 الأصلي، وسجلت عضواً (وليس مالك المثيل)، واستوردت n8n-nodes-base.function، ونفذته. Function pid=7 هو PID الرئيسي لـ n8n. نفس JS في Code v2: hasProcess: false. العملية الفرعية task-runner هي pid 26. الشاهد N8N-FUNCTION-VM2-WITNESS.
المنعطفات الخاطئة المسجلة بالفعل: نوع Function مرفوض كمخفي/غير معروف (ثم العقدة مستبعدة فعلاً)؛ Function pid يساوي العملية الفرعية task-runner (ثم انتقلت بالفعل)؛ Code v2 يرى process (ثم runner ليس هو التحكم)؛ gadget استغلال vm2، reverse shell، OS LPE. مسرح. الشاهد هو PID الرئيسي مقابل hasProcess: false.
cd lab
./run.sh
الهدف فقط http://127.0.0.1:18201. الافتراضي NODES_EXCLUDE. المهاجم عضو.
authenticated-as=member
function-fields pid=7 witness=N8N-FUNCTION-VM2-WITNESS
code-fields hasProcess=False pid=None
compare function_pid=7 code_pid=None main_pid=7 runner_pid=26 who=member
SUCCESS N8N-FUNCTION-VM2 who=member function_pid=7 code_pid=None main_pid=7 runner_pid=26 N8N-FUNCTION-VM2-WITNESS
أضف n8n-nodes-base.function، و n8n-nodes-base.functionItem، و @n8n/n8n-nodes-langchain.code إلى الافتراضي NODES_EXCLUDE، أو وجهها عبر JsTaskRunnerSandbox بالطريقة التي يفعلها Code v2 بالفعل. لوحة hidden ليست كافية.
Function.node.ts · Code.node.ts · nodes.config.ts · task-runner-process-js.tsGNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. لا ضمان.