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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-55182-analysis | Kitploit
أدوات/GitHubGitHub/santihabib/cve-2025-55182-analysis
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراقالتعلم والتعليم
GitHubsantihabib/cve-2025-55182-analysis

CVE-2025-55182-analysis

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

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة

تحليل تقني لـ CVE-2025-55182: رحلتي البحثية

⚠️ إخلاء مسؤولية مهم

توثّق هذه الوثيقة عملية بحثي الشخصية في CVE-2025-55182، بما في ذلك النتائج المؤكدة والتجارب التي أجريتها. وهي تمثّل سردًا صادقًا لتحقيقي، بما في ذلك الافتراضات الخاطئة الأولية والاختراق النهائي.


الملخص التنفيذي

بعد تحقيق موسّع في CVE-2025-55182 (درجة خطورة CVSS 10.0)، كان استنتاجي الأولي أن تنفيذ الأكواد البرمجية عن بُعد (RCE) التلقائي لم يُثبت علنًا وأن الاستغلال يتطلب أدوات مساعدة (gadgets) خاصة بالتطبيق. كان هذا الاستنتاج خاطئًا.

في 5 ديسمبر 2025، بعد تلقي رؤى إضافية من باحث مستقل آخر على منصة X (@maple3142)، نجحت في إعادة إنتاج تنفيذ أكواد برمجية عن بُعد (RCE) كامل غير مصادَق عليه على Next.js القياسي دون الحاجة إلى أي ثغرات برمجية خاصة بالتطبيق.


منهجية البحث

المرحلة 1: تحليل التصحيح (الافتراض الخاطئ الأولي)

تركز اهتمامي الأولي على التغيير الأول في تصحيح React 19.0.1:

النسخة الضعيفة (19.0.0):

root@kitploit:~
return fn.bind.apply(fn, [null].concat(_ref));

النسخة المصححة (19.0.1):

root@kitploit:~
if (Array.isArray(promiseValue)) {
  promiseValue = promiseValue.slice(0);
} else {
  promiseValue = [];
}

افترضت أن مسار الهجوم يتم عبر fn.bind.apply() مع كائنات خبيثة بدلاً من المصفوفات. تمكنت من إثبات حقن الوسائط في Server Actions باستخدام $ACTION_REF_ مع bound الذي يتحكم فيه المهاجم:

root@kitploit:~
curl -X POST http://localhost:9000/ \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"<ACTION_ID>","bound":["; id #","/etc/passwd"]}'

النتيجة: تم حقن الوسائط بنجاح في Server Action. ومع ذلك، فإن هذا يؤدي فقط إلى RCE إذا كانت الدالة الهدف تستخدم تلك الوسائط بطريقة غير آمنة.


المرحلة 2: سلوك غير آمن لوحظ في التصحيح

كشف نظرة أعمق في التصحيح عن تغيير مهم آخر في getOutlinedModel():

النسخة الضعيفة:

root@kitploit:~
for (key = 1; key < reference.length; key++)
  parentObject = parentObject[reference[key]];

النسخة المصححة:

root@kitploit:~
if (hasOwnProperty.call(value, name)) {
  value = value[name];
}

هذا السلوك الضعيف سمح بالتنقل عبر سلسلة النماذج الأولية (prototype chain) باستخدام مراجع مثل:

root@kitploit:~
$1:__proto__:constructor:constructor

المرحلة 3: تجربة مع الكائن القابل للـ then و Function.constructor (طريق مسدود)

أثناء البحث، اختبرت كائنًا قابلاً للـ then (thenable) يحتوي على خاصية .then:

root@kitploit:~
{"then": "$1:__proto__:constructor:constructor"}

عندما يعالج JavaScript هذا عبر await:

  1. يرى JavaScript خاصية .then ويعامل الكائن على أنه Promise
  2. يستدعي obj.then(resolve, reject)
  3. إذا كانت then تشير إلى Function.constructor، يحاول JavaScript تنفيذ Function(resolve, reject)

النتيجة الملاحظة:

root@kitploit:~
SyntaxError: Unexpected token 'function'
    at Object.Function [as then] (<anonymous>)

المرحلة 4: قيد ربط الوسائط (الجدار)

عند استدعاء Function.constructor بالشكل:

root@kitploit:~
Function(resolve, reject)
// resolve.toString() = "function () { [native code] }"
// Function attempts to parse this as code → SyntaxError

الوسيطان resolve وreject هما دائمًا دالتا Promise الأصليتان. يحاول Function تفسير الوسيط الأول على أنه كود مصدري، وهو JavaScript غير صالح.

هنا توقف بحثي. خلصت إلى أن التحكم في وسائط Function.constructor كان مستحيلاً دون وجود أداة مساعدة (gadget) خاصة بالتطبيق.


المرحلة 5: الاختراق — إزالة تسلسل Blob (5 ديسمبر 2025)

بعد نشر النتائج الأولية، أشارني باحث مستقل آخر إلى قطعة حاسمة فاتتني: نقطة إغراق (sink) إزالة التسلسل $B (Blob).

القطعة المفقودة

في كود React Flight منفذة الخادم المُجمَّع (غير الظاهر في مصادر TypeScript)، يوجد:

root@kitploit:~
case "B":
  return response._formData.get(response._prefix + id);

الموقع:

  • الحزمة: [email protected]
  • الملف: cjs/react-server-dom-webpack-server.node.unbundled.development.js
  • وأيضًا في: [email protected]/dist/compiled/react-server-dom-webpack/

يسمح هذا الكود لـ React باستدعاء response._formData.get() بقيم مشتقة من مدخلات يتحكم فيها المهاجم، بدون تحقق.

لماذا يغيّر هذا كل شيء

النهجوسائط Function.constructorالنتيجة
كائن قابل للـ then (المرحلة 3)resolve, reject (دوال أصلية)❌ SyntaxError
Blob + استجابة مسمومة_prefix (سلسلة يتحكم فيها المهاجم)✅ RCE

من خلال الجمع بين:

  1. التنقل عبر النماذج الأولية ($1:__proto__:then → Chunk.prototype.then)
  2. كائن _response مسموم يحتوي على:
    • _formData.get مضبوطًا على Function.constructor
    • _prefix مضبوطًا على كود JavaScript عشوائي
  3. نموذج داخلي يحتوي على مرجع $B

ينفّذ معالج case "B": التالي:

root@kitploit:~
Function.constructor("<attacker code>" + id)

هذا يتجاوز قيد ربط الوسائط بالكامل.


تحليل الـ PoCs المنشورة

تستخدم PoCs الشهيرة على GitHub التي تدّعي RCE معرّفات Actions مثل:

  • "child_process#execSync"
  • "vm#runInThisContext"

هذه مزيفة. يقبل Next.js فقط معرّفات Actions المعرّفة من قبل التطبيق. المعرّفات غير الصالحة تُنتج:

root@kitploit:~
TypeError: Cannot read properties of undefined (reading 'workers')

ومع ذلك، الاستغلال الحقيقي لا يتطلب معرّفات Actions مزيفة. أي معرّف Server Action صالح يعمل.


التحقق والأثر

اختبرت سلسلة الاستغلال هذه على تطبيق Next.js 15.0.3 + React 19.0.0 الأدنى الذي يحتوي فقط على:

root@kitploit:~
async function myAction(data) {
  "use server";
  console.log("Server Action called with:", data);
  return { success: true, received: data };
}

النتيجة: تم تأكيد RCE كامل. لم يحتوِ التطبيق على أي كود غير آمن، ولا eval، ولا execSync، ولا أدوات مساعدة.

تقييم الأثر


اكتشاف حاسم: حالة التصحيح

اعتبارًا من 5 ديسمبر 2025، لا تزال نقطة إغراق $B موجودة في Next.js 15.0.5 (النسخة المزعوم تصحيحها).

التحقق:

root@kitploit:~
$ npm pack [email protected]
$ tar -xzf next-15.0.5.tgz
$ grep -A5 'case "B":' package/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js

النتيجة:

root@kitploit:~
case "B":
  return response._formData.get(response._prefix + obj);

الكود مطابق تمامًا للنسخة الضعيفة.


ملاحظة الإفصاح المسؤول

نظرًا لاكتشاف أن الثغرة قد لا تكون مصححة بالكامل في الإصدارات "المصححة" المزعومة، سأحجب حمولة إثبات المفهوم (proof-of-concept) الكاملة لحين التحقق مع فرق الأمان في Vercel وMeta.

التفاصيل التقنية المقدمة في هذه الوثيقة كافية لفهم آلية الثغرة ولكنها ناقصة عمدًا لمنع الاستغلال الفوري.


الاستنتاجات المحدثة

ما وجدته (المراحل 1-4)

التقنيةالحالة
حقن الوسائط عبر bound✅ مؤكد (تأثير محدود)
التنقل عبر النماذج الأولية✅ مؤكد

ما فاتني في البداية

المسألةالأثر
نقطة إغراق إزالة التسلسل $B (Blob)❌ حرجة - تتيح التحكم في الوسائط
فحص الكود المُجمَّع مقابل الكود المصدري❌ النقطة موجودة فقط في المخرجات المُجمَّعة
آلية تسميم كائن الاستجابة❌ تتيح تجاوز جميع الحمايات

التقييم النهائي

يمكن استغلال CVE-2025-55182 لتنفيذ أكواد برمجية عن بُعد (RCE) كامل غير مصادَق عليه على تطبيقات Next.js القياسية.

  • ✅ لا يتطلب أداة مساعدة خاصة بالتطبيق
  • ✅ يعمل بطلب HTTP POST واحد
  • ✅ "الأداة المساعدة" مدمجة في منطق إزالة التسلسل الخاص بـ React
  • ⚠️ قد لا يكون مصححًا بالكامل في الإصدارات المزعوم تصحيحها

الجدول الزمني

  • 3 ديسمبر 2025: تحليل التنقل عبر النماذج الأولية ونهج الكائن القابل للـ then (طريق مسدود)
  • 4 ديسمبر 2025: تلقي رؤية حول إزالة التسلسل عبر $B من باحث مستقل
  • 5 ديسمبر 2025: تأكيد إعادة إنتاج RCE كامل
  • 5 ديسمبر 2025: اكتشاف أن الثغرة قد تستمر في الإصدارات "المصححة"
  • 5 ديسمبر 2025: نشر هذا التقرير (مع حجب تفاصيل PoC)

التوصيات

  1. التحديث فورًا إلى أحدث إصدارات React وNext.js
  2. تحقق من التصحيح باختبار ما إذا كانت إزالة التسلسل عبر $B لا تزال تقبل كائنات _response عشوائية
  3. راقب محاولات الاستغلال - ابحث عن:
    • ترويسات Next-Action غير معتادة
    • حمولات multipart معقدة بأنماط $@ و__proto__ و$B
  4. فكر في قواعد WAF لحظر الأنماط المشبوهة في طلبات Server Actions
  5. تواصل مع فرق الأمان إذا كنت تشغّل إصدارات متأثرة في بيئة الإنتاج

الشكر والتقدير

  • الرؤية الحاسمة بشأن إزالة التسلسل عبر $B قدمها باحث على منصة X (@maple3142)
  • فريقا أمان React وNext.js لعملهما على التصحيحات (تحقق مستمر)
  • مجتمع أبحاث الأمن للتحقيق التعاوني

الدروس المستفادة

  1. افحص الكود المُجمَّع، وليس المصادر فقط - يمكن للثغرات الحرجة أن تختبئ في المخرجات المُجمَّعة
  2. أعد النظر في الافتراضات عند ظهور معلومات جديدة
  3. البحث التعاوني ضروري للثغرات المعقدة
  4. وثّق الرحلة - الطرق المسدودة قيّمة لفهم الصورة الكاملة
  5. الإفصاح المسؤول له الأولوية على التقدير العام

آخر تحديث: 5 ديسمبر 2025

تنزيل الأداة
الجانبالنتيجة
مطلوب مصادقة؟❌ لا
مطلوب أداة مساعدة خاصة بالتطبيق؟❌ لا
يعمل على Next.js القياسي؟✅ نعم
عدد الطلبات المطلوبة1 طلب POST
الإصدارات المتأثرةNext.js ≤15.0.4 + React 19.0.0
درجة CVSS10.0 (مبررة)
الوصول إلى Function.constructor عبر كائن قابل للـ then✅ مؤكد (لكنه غير قابل للاستغلال بمفرده)
اكتشاف الإصدارات الضعيفة✅ مؤكد