رأس القلم
كالي
ل AMD64
ماك
ل ARM64
ماك
قريباً
النوافذ
قريباً

CVE-2025-55184 وهجوم تجويع المهام الصغيرة على مكونات خادم React

يمثل الإرشاد الأمني لشهر ديسمبر 2025 الصادر عن فريق React نقلة نوعية في أمن تطبيقات الويب. فمع اعتماد الصناعة بسرعة على التقديم من جانب الخادم (SSR) عبر مكونات خادم React (RSC)، انتقل سطح الهجوم من DOM العميل إلى حدود التسلسل في الخادم. CVE-2025-55184 ليس خطأً تافهًا في استنفاد الموارد؛ إنه خطأ متطور تعقيد خوارزمية الحرمان من الخدمة مستهدفًا البنية الأساسية لحلقة أحداث Node.js. من خلال استغلال إلغاء التسلسل التكراري للوعود ضمن بروتوكول الطيران، يمكن للمهاجم غير المصادق عليه أن يحفز تجويع قائمة انتظار المهام الصغيرةمما يجعل عملية الخادم في غيبوبة مع إبقاء منافذ TCP مفتوحة. يشرح هذا الدليل النهائي هذه الثغرة على مستوى الأسلاك، ويستكشف آلية تكرار "Ouroboros"، ويوضح كيف بنليجنت يستفيد من التشويش التفاضلي القائم على الذكاء الاصطناعي للتحقق من صحة هذا الخلل دون تعطيل توافر الإنتاج.

CVE-2025-55184

بنية التحطم: مركز القيادة والتحكم السريع والرحلة وحلقة الحدث

لتقدير خطورة CVE-2025-55184 بشكل كامل، يجب علينا أولاً تفكيك طبقة الاتصال الخاصة التي تشغّل موجه تطبيقات Next.js و React 19: وهي بروتوكول الطيران.

تنسيق سلك بروتوكول الطيران

على عكس REST أو GraphQL، والتي عادةً ما تُرجع JSON ثابتة، يستخدم RSC تنسيق تدفق هجين قائم على الصفوف مصمم لحل أشجار المكونات بشكل تدريجي.

يبدو تدفق استجابة طيران نموذجي مثل هذا:

HTTP

1:I{"id":134,"chunks":["app/page.js"],"name":"default"} 2:{"title":"Welcome","content":"$@1"} 3:{"$":"$@2"}

  • السطر 1: يستورد وحدة نمطية (مكون العميل).
  • السطر 2: يحدد كائن JSON يشير إلى القطعة 1.
  • السطر 3: يحدد مرجعًا للقطعة 2.

الميزة القاتلة التسلسل غير المتزامن

تسمح React للمطورين بتمرير الوعود من الخادم إلى العميل. عندما تصادف أداة التسلسل وعدًا مُعلَّقًا، تُصدر عنصرًا نائبًا. يُبرمَج مُزيل التسلسل (على الطرف المتلقي، والذي يمكن أن يكون أيضًا خادمًا في البنى المتدرجة) لانتظار حل هذه الوعود.

يستلزم هذا الشرط وجود استراتيجية القرار التكراري: إذا تم حل الوعد (أ) إلى الوعد (ب)، يجب أن يشترك مُلغي الوعد (ب) في الوعد (ب). هذا التكرار هو مكان الثغرة.

أساسيات Node.js الداخلية: تجويع قائمة انتظار المهام الصغيرة

لماذا يعد هذا الاستغلال مدمرًا للغاية مقارنةً بـ بينما(صحيح) حلقة؟ تكمن الإجابة في جدولة مهام محرك V8.

  1. ماكروتاسكيس: المؤقتات (ضبط الوقت المستقطع)، استدعاءات الإدخال/الإخراج, ضبط فوري.
  2. المهام الدقيقة: الوعد بالاستدعاء (... ثم, الصيد), process.nextTick.

ميكانيكي الجوع

تعمل حلقة حدث Node.js على قاعدة أولوية صارمة: يجب استنزاف قائمة انتظار المهام المصغرة بالكامل قبل أن تنتقل حلقة الحدث إلى المرحلة التالية.

في ثغرة CVE-2025-55184، يرسل المهاجم حمولة حيث يحل الوعد إلى نفسه (أو سلسلة تؤدي إلى نفسه).

  • تقوم أداة إلغاء التحويل بجدولة .ثم() للتعامل مع القرار.
  • يعمل رد الاستدعاء، ويرى التكرار، ويجدول أخرى .ثم().
  • والأهم من ذلك أن هذا يحدث بشكل متزامن فيما يتعلق بمعالجة قائمة الانتظار. لا يصل طول قائمة الانتظار إلى الصفر أبداً.
  • التأثير: يتم حظر عمليات استدعاء عمليات الإدخال/الإخراج من الشبكة (التعامل مع الطلبات الجديدة)، ومسابير التحقق من الصحة، وإشارات نظام التشغيل بشكل دائم. العملية حية (معرّف PID موجود)، والمنافذ مفتوحة (تعمل SYN-ACK على مستوى نظام التشغيل)، لكن التطبيق ميت دماغياً.

الهندسة العكسية للاستغلال

حمولة "أوروبوروس"

توجد الثغرة في رد فعل-خادم-دوم-ويب باك (ومتغيراته لـ Parcel/Turbopack). غير المصححة قيمة العملية تفتقر الدالة إلى تحديد العمق أو اكتشاف الدورة للأنواع المرجعية.

يمكن للمهاجم أن يستخدم هذا الأمر كسلاح عن طريق بناء الرسم البياني الدوري الموجه (DCG) ضمن حمولة الرحلة.

رمز الاستغلال المفاهيمي (مستوى البروتوكول)

على الرغم من أن الترميز الثنائي الفعلي معقد، إلا أن البنية المنطقية لناقل الهجوم بسيطة بشكل أنيق:

جافا سكريبت

'/// تمثيل JSON لبنية الرحلة الخبيثة // الهدف: نقطة نهاية موجه تطبيق Next.js (POST /)

{"id": "root"، "chunks": []، "القيمة": { { // نعرّف كائن الوعد يدويًا باستخدام بناء الجملة "$": "$P4TPromise"، "الحالة": "تم التنفيذ"، "القيمة": { { // قيمة هذا الوعد الذي تم حلّه هي... نفسها. "$": "$P4T@root" } } }`

عندما يقوم الخادم بتحليل هذا

  1. يرى الوعد قد تحقق.
  2. يفتح القيمة.
  3. يرى مرجعًا إلى الكائن الجذر (وهو الوعد).
  4. يقوم بجدولة مهمة صغيرة لفك تغليف الكائن الجذر مرة أخرى.
  5. الخطوة 1.

تحدث هذه الحلقة بالكامل في الذاكرة، متجاوزةً بذلك برامج WAF التقليدية التي تبحث عن توقيعات حقن SQL أو أجسام الطلبات الكبيرة. غالبًا ما تكون الحمولة أصغر من 1 كيلوبايت.

ملحمة "الإصلاح غير المكتمل" (CVE-2025-67779)

من الضروري ملاحظة أن التصحيح الأولي لهذه الثغرة تم تجاوزه في غضون أيام. حاول الإصلاح الأول تتبع عمق التكرار ولكنه فشل في حساب بعض الاختلافات في البنية المتداخلة (على سبيل المثال، التفاف الدورة داخل الخريطة أو مجموعة). وقد أدى ذلك إلى CVE-2025-67779. ولذلك، فإن مجرد "التحديث" لا يكفي؛ يجب على المرء أن يتأكد من أنه على نهائي الإصدارات المصححة (React 19.0.3+/ Next.js 15.0.6+).

الشريك الصامت CVE-2025-55183 (كشف شفرة المصدر)

في حين أن 55184 يدمر التوفر, CVE-2025-55183 يدمر السرية. تم الكشف عن هذه الثغرة المرافقة في نفس الوقت.

آلية التسرب

إجراءات الخادم هي دوال داخلية. ومع ذلك، إذا طلب أحد المهاجمين إجراء الخادم عن طريق المعرف كقيمة (بدلاً من استدعائه)، فإن المتسلسل الضعيف يعامله ككائن بيانات. عند القيام بذلك، فإنه يقوم بتسلسل نص الدالة المترجمة كسلسلة.

التأثير:

  • الاستخراج المنطقي: يمكن للمهاجمين قراءة منطق التحقق من صحة الواجهة الخلفية (إذا (!user.isAdmin) ...).
  • الكشط السري: يتم الكشف عن مفاتيح واجهة برمجة التطبيقات المشفرة أو نقاط النهاية الداخلية.
  • اكتشاف واجهة برمجة تطبيقات الظل: تصبح إجراءات الخادم غير المستخدمة أو المخفية أهداف هجوم مرئية.

التحقق المتقدم: نهج Penligent

في بيئة عالية المخاطر، فإن "محاولة تحطيم الخادم" لإثبات وجود ثغرة أمنية أمر غير احترافي وخطير. بنليجنت يستخدم الذكاء الاصطناعي الاستغلال الآمن إستراتيجيات للتحقق من هذه المكافحات دون أي توقف.

الاستراتيجية 1: استكشاف التكرار المحدود (DoS الآمن)

بدلًا من حلقة لا نهائية، يقوم وكيل الذكاء الاصطناعي Penligent ببناء حمولة مع عمق التكرار المحدود ($N=5000$).

  • المسبار: سلسلة وعود متكررة تنتهي بعد 5000 تكرار.
  • التحليل الاستدلالي:
    • الضعفاء: يعالج الخادم السلسلة. يكتشف Penligent انجراف الكمون (على سبيل المثال، زمن الاستجابة = خط الأساس + 200 مللي ثانية) وارتفاع عابر في استخدام الكومة.
    • مصححة: تطرح آلية الأمان الجديدة في React 19 خطأ "مرجع دوري" على الفور. الاستجابة شبه فورية (500 خطأ داخلي في الخادم).
  • الخاتمة: إذا ارتبط الكمون مع العمق ($T \propto N$)، يتم تأكيد الثغرة دون تعليق العملية.

الاستراتيجية 2: التشويش التفاضلي لتسريبات المصدر (CVE-2025-55183)

لاكتشاف ثغرة التعرض لشفرة المصدر:

  1. أخذ البصمات: يقوم Penligent بتحديد معرّفات إجراءات الخادم المتاحة من حزم شرعية من جانب العميل.
  2. الحقن العاكس: يرسل الوكيل طلبات الطيران المعدلة في محاولة "صدى" هذه المعرفات كخصائص بيانات.
  3. الذكاء الاصطناعي لمطابقة الأنماط: يتم تحليل دفق الاستجابة. إذا اكتشف الذكاء الاصطناعي توقيعات دالة JavaScript (على سبيل المثال, الدالة المزامنة $..., var _0x...) ضمن استجابة JSON، فإنه يضع علامة على تسرب المعلومات الحرجة.
CVE-2025-55184 وهجوم تجويع المهام الصغيرة على مكونات خادم React

خطة عمل المهندس والمعالجة

نافذة الاستغلال مفتوحة على مصراعيها. تقوم الروبوتات الآلية بالفعل بالبحث عن مثيلات Next.js 15.0.x المكشوفة.

1. مصفوفة الترقية (التنفيذ الصارم)

يجب عليك التأكد من حل شجرة التبعية الخاصة بك إلى الإصدارات الآمنة. لا تعتمد على الإشارات السيمفرية (^) وحدها؛ تحقق من pnpm-lock.yaml أو حزمة-قفل الحزمة.json.

الحزمةالنطاق الضعيفالإصدار الآمن (الحد الأدنى)
رد فعل-خادم-دوم-ويب باك< 19.0.319.0.3
التالي15.0.0 – 15.0.515.0.6+ (أو 14.2.34+ للإصدار 14)

2. تجاوزات حل التبعيات

لأن رد فعل-خادم-دوم-ويب باك غالبًا ما تكون تبعية متداخلة، يجب عليك فرض الحل في الحزمة.json لمنع الإصدارات القديمة من التسلل إلى الداخل:

JSON

// package.json { "pnpm": { "التجاوزات": { {"react-server-dom-webpack": "19.0.3", "react-server-dom-turbopack": "19.0.3" } } }

3. التحقق المستمر

الأمان ليس تصحيحاً لمرة واحدة. استخدم بنليجنت لمراقبة النشر الخاص بك باستمرار. مع ظهور تجاوزات جديدة (مثل تلك التي ظهرت في CVE-2025-67779)، يتم تحديث نماذج الذكاء الاصطناعي من Penligent لاختبار هذه الاختلافات، مما يضمن بقاء محيطك محصنًا ضد الهجمات المنطقية المتطورة.

المراجع والروابط المرجعية:

شارك المنشور:
منشورات ذات صلة