TL؛ DR
React2Shell (CVE-2025-55182) يخلق حرجة مخاطر RCE في مكونات خادم React (RSC) والأطر التي تتضمنها، بما في ذلك Next.js. لأن الثغرة موجودة داخل RSC في طبقة التسلسل وإلغاء التسلسل، يمكن للمهاجمين إرسال طلب HTTP معد مسبقًا وتشغيله تنفيذ التعليمات البرمجية عن بعد غير المصادق عليها، حتى عندما تقوم الفرق بتشغيل تكوينات الإطار الافتراضية. Next.js تواجه التطبيقات أعلى مستوى من التعرض لأنها تقبل وتعالج رحلة تفاعلية الحمولات عبر HTTP بشكل افتراضي.
يؤثر الخلل على إصدارات متعددة من حزم خادم Reactولا يحتاج المهاجمون إلى منطق تطبيق مخصص لاستغلاله. يُظهر باحثو الأمن موثوقية تقترب من 100%، وتكشف عمليات المسح الأولية أن العديد من بيئات السحابة معرضة للخطر. Next.js الحالات. يجب على الفرق إجراء التصحيح على الفور والتحقق من صحة نظامهم البيئي الكامل لتقليص مخاطر RCE في React2Shell (CVE-2025-55182).
أدى اكتشاف ثغرة أمنية حرجة تم الإبلاغ عنها من خلال برنامج مكافأة الأخطاء التابع لشركة Meta في 29 نوفمبر إلى إثارة استجابات عاجلة عبر نظام JavaScript البيئي.
المعين CVE-2025-55182، تم الكشف عنها في 3 ديسمبر ويشار إليها الآن باسم React2Shell هي ثغرة أمنية ذات خطورة قصوى تؤثر على مكونات خادم React بالإضافة إلى الأطر التي تُدمجها. في البداية، تم تعيين مُعرّف ثغرة Next.js منفصل (CVE-2025-66478)، لكن NVD دمجه لاحقًا في ثغرة React CVE الأساسية كمُدخل مُكرر.
تكمن المشكلة الأساسية في التعامل غير الآمن مع حمولات RSC المتسلسلة التي يمكن تشغيلها عبر طلب HTTP. هذا يفتح المجال أمام جهات خبيثة لإرسال طلب HTTP مُتلاعب به، مما يؤدي إلى تشغيل JavaScript عشوائيًا على الخادم بعد... تم إلغاء تسلسله بواسطة React.
نظرة عامة على CVE-2025-55182
مكونات خادم React مدمجة بعمق في الأطر الحديثة، وفي كثير من الحالات تكون مُفعّلة افتراضيًا. لهذا السبب، قد تتعرض التطبيقات لـ React2Shell (CVE-2025-55182) حتى لو لم يُعرّفوا صراحةً نقطة نهاية وظيفة الخادم. لا يزال تطبيق RSC موجودًا، وهذا وحده كافٍ لتفعيل مسارات التعليمات البرمجية المعرضة للخطر وإنشاء مخاطر RCE.
الخلل ينبع من الطريقة التي بروتوكول React Flightيعالج l حمولات مُهيكلة مُعينة. حاولت الإصدارات القديمة تتبع مسارات الكائنات المُقدمة في الحمولة دون التحقق من صحة البنية أو توقعها. يمكن للمهاجم التلاعب بهذه العملية والوصول في النهاية إلى تنفيذ التعليمات البرمجية على الخادم. لا يتطلب الأمر مصادقة، ولا تكوينًا خاصًا، ولا منطقًا خاصًا بالتطبيق. نظرًا لوجود المشكلة في التكوينات الجاهزة، standard يتم نشرها دون الحاجة إلى أي شروط غير عادية.
يحدث الاستغلال عندما يرسل المهاجمون طلبات HTTP POST ضارة تسيء استخدام "vm.runInThisContextآلية "من خلال إجراءات الخادم". بينما لا يكشف React نقطة النهاية المعرضة للخطر مباشرةً، فإن Next.js يفعل ذلك، مما يُنشئ ناقل هجوم عن بُعد حقيقي.
يقبل Next.js حمولات Flight من أي طلب، ويعالجها دون التحقق من صحتها، ثم يمررها إلى مُفكك تسلسل React. يعامل النظام هذه المدخلات الخارجية على أنها موثوقة، مما يُمكّن المهاجمين من تحقيق... تنفيذ التعليمات البرمجية عن بعد من خلال نقاط النهاية التي يمكن الوصول إليها علنًا مع امتيازات عملية Node.js الكاملة على الخادم المستهدف.
تزداد الخطورة بشكل كبير لأن التكوينات الافتراضية تظل عرضة للخطر React2Shell (CVE-2025-55182) والنتيجة مخاطر RCE. A standard تطبيق Next.js الذي قمت بإنشائه باستخدام create-next-app يُعرِّض نفسه للاختراق دون الحاجة إلى أي تعليمات برمجية مخصصة أو تغييرات في التكوين. يؤكد باحثو الأمن موثوقية الاستغلال بنسبة تقارب 100%، ويُفيدون بأن 39% من بيئات السحابة تُشغِّل نسخًا مُعرَّضة للخطر، بينما تُشغِّل 44% من جميع البيئات تطبيقات Next.js المُعرَّضة للخطر والمتأثرة بها. React2Shell.
فهم التعرض لـ React2Shell
تمتد الإصدارات المعرضة للخطر عبر إصدارات متعددة:
| مكون | الإصدارات المتأثرة |
|---|---|
| حزمة ويب خادم التفاعل | 19.0 ، 19.1.0 ، 19.1.1 ، 19.2.0 |
| رد فعل-خادم-dom-parcel | 19.0 ، 19.1.0 ، 19.1.1 ، 19.2.0 |
| حزمة توربو لخادم التفاعل | 19.0 ، 19.1.0 ، 19.1.1 ، 19.2.0 |
لأن العديد من أطر العمل تُضمّن دعم RSC في جوهرها، فإن التطبيقات غالبًا ما ترث الشفرة الضعيفة دون أن تُدرك ذلك. أي إطار عمل أو مُجمّع يُحمّل هذه الحزم يُمكن أن يُعرّض التطبيق لثغرة React2Shell (CVE-2025-55182) ومخاطر RCE. يشمل ذلك:
- Next.js (موجه التطبيق)
- معاينة React Router RSC
- مكون Vite RSC الإضافي
- مكون Parcel RSC
- مجموعة أدوات تطوير البرامج Redwood
- واكو
- معرض
يتأثر Next.js بشكل خاص لأنه يستخدم نقاط نهاية مرتبطة بـ RSC عبر HTTP افتراضيًا. الإصدارات التي تبدأ بـ 14.3.0 إصدارات الكناري، جنبا إلى جنب مع معظم 15.x وفي وقت مبكر 16.x الإصدارات، تحتوي على التنفيذ المعرض للخطر. أي شخص يستخدم Canary 14.3.0-canary.77 أو في وقت لاحق ينبغي العودة إلى مستقر 14.x الفرع حتى يتم نشر نسخة Canary المصححة.
إصدارات Next.js المصححة تتضمن:
| مكون | الإصدارات المصححة |
|---|---|
| Next.js | 15.0.5، 15.1.9، 15.2.6، 15.3.6، 15.4.8، 15.5.7، 16.0.7 |
نقاط الاتصال العامة والكشف الموثوق
بعد الكشف عن الثغرة، انتشرت العديد من نظريات إثبات المفهوم المزعومة. كان الكثير منها إما غير دقيق أو مبنيًا على افتراضات خاطئة. أكد لاكلان ديفيدسون، مؤلف الثغرة الأصلي، علنًا في رد فعل 2 شل أن GitHub PoCs المتداولة لا تتطابق مع الاستغلال المشترك بشكل خاص مع صياني React/Next.js وقدمت إثبات المفهوم الخاص.
إن المشكلة الرئيسية في المحاولات العامة المبكرة هي فشلها في إدراك أن الاستغلال ينجح ضد standard نشر Next.js دون الحاجة إلى منطق تطبيق محدد أو وظائف من جانب الخادم.
أكد باحثو الأمن من منظمات متعددة أن اكتشاف الثغرة الأمنية يتطلب أكثر من مجرد تحديد وجود RSC. نشر فريق Assetnote طريقة الكشف الموثوقة و الماسح الضوئي قادر على تأكيد المشكلة دون استخدام أي منطق استغلال. سيتوفر لدى ميتاسبلويت قريبًا استغلال متاح لهذه الثغرة أيضًا.
يستفيد نهج الكشف من كيفية تعامل React Server مع مراجع خصائص الكائن باستخدام فواصل النقطتين داخل ReactFlightClientConfigBundlerWebpack.js/requireModule() وظيفة. عندما تعالج الإصدارات المعرضة للخطر حمولة متعددة الأجزاء مُهيكلة خصيصًا، وتحاول عبور مسارات كائنات متداخلة غير موجودة، فإنها تُفعّل استجابات أخطاء متوقعة. يُرسل طلب التشخيص نمطًا مرجعيًا مثل `$1:a:a` مقترنًا بكائن فارغ. تحاول التطبيقات الضعيفة حل هذه المشكلة كوصول إلى خاصية متداخلة على قيمة غير مُعرّفة، مما يؤدي إلى حدوث استثناء. يُرجع الخادم حالة 500 مع نمط مُميز لتلخيص الأخطاء في نص الاستجابة.
export function requireModule<T>(metadata: ClientReference<T>): T {
let moduleExports = __webpack_require__(metadata[ID]);
if (isAsyncImport(metadata)) {
if (typeof moduleExports.then !== 'function') {
// This wasn't a promise after all.
} else if (moduleExports.status === 'fulfilled') {
// This Promise should've been instrumented by preloadModule.
moduleExports = moduleExports.value;
} else {
throw moduleExports.reason;
}
}
if (metadata[NAME] === '*') {
// This is a placeholder value that represents that the caller imported this
// as a CommonJS module as is.
return moduleExports;
}
if (metadata[NAME] === '') {
// This is a placeholder value that represents that the caller accessed the
// default property of this if it was an ESM interop module.
return moduleExports.__esModule ? moduleExports.default : moduleExports;
}
return moduleExports[metadata[NAME]];
}
إجراءات فورية للمؤسسات التي تواجه React2Shell (CVE-2025-55182) ومخاطر RCE
قم بإجراء فحص شامل لقاعدة التعليمات البرمجية الخاصة بك والتطبيقات المنشورة لتحديد إصدارات الحزم المعرضة للخطر. انتبه جيدًا لتبعيات حزم خادم React المباشرة، وتطبيقات RSC على مستوى الإطار (Next.js، وWaku، وRedwood، إلخ)، والتطبيقات المبنية باستخدام `create-next-app` أو أدوات دعم مماثلة، والتطبيقات المحفوظة في حاويات والتي قد تحتوي على صور أساسية قديمة.
تحليل تكوين البرمجيات (SCA) أدوات مثل زيجيني SCA يمكنك اكتشاف التبعيات المتأثرة تلقائيًا في جميع أنحاء مخزون البرامج لديك.
قم بالتصحيح فورًا:
تحديث الإصدارات المُصحَّحة، مثل React (19.0.1، 19.1.2، 19.2.1)، وNext.js (15.0.5، 15.1.9، 15.2.6، 15.3.6، 15.4.8، 15.5.7، 16.0.7)، وأي حزم إطار عمل تتضمن RSC. تُطبِّق هذه التحديثات عملية تحقق صارمة لمعالجة حمولة RSC، وتمنع إلغاء مرجعية الخصائص غير الآمنة التي تُمكِّن من الاستغلال.
أدوات الإصلاح الآلية، مثل ميزة الإصلاح التلقائي في Xygeni، يمكنه تسريع العملية عبر قواعد بيانات كبيرة.
تنفيذ حماية WAF المؤقتة:
أثناء انتشار التصحيحات عبر عملية النشر الخاصة بك pipelineفعّل قواعد جدار حماية تطبيقات الويب للحماية الفورية. أصدر كبار مزودي الخدمات السحابية مجموعات قواعد طارئة. كلودفلاري:الحماية التلقائية لجميع الطبقات عند استخدام وكيل حركة مرور React بالإضافة إلى AWS، Akamai، Fastly، Google Cloud تتوفر قواعد دفاعية مماثلة قم بتمكين عناصر التحكم هذه على الفور لإنشاء طبقة واقية أثناء فترة الانتقال.
مراقبة حركة مرور HTTP المشبوهة:
تكوين التسجيل والتنبيه لمؤشرات محاولات الاستغلال: حمولات بروتوكول RSC Flight المشوهة أو غير المتوقعة، والأنماط غير المعتادة لأخطاء 500 على نقاط نهاية RSC، وطلبات POST مع رؤوس `Next-Action` أو `Next-Router-State-Tree` المشبوهة، والطلبات المتكررة إلى مسارات `/_next/` مع حمولات متعددة الأجزاء
التحقق من قائمة مواد البرنامج الخاص بك:
تُجمّع العديد من الأطر تبعيات RSC بشفافية، مما يجعلها غير مرئية في مراجعات التبعيات السطحية. افحص ملفك الكامل SBOM لضمان: عدم وجود أي تبعيات انتقالية على حزم خادم React المعرضة للخطر، ولم تقدم تحديثات الإطار عن غير قصد تنفيذات RSC أقدم.
إغلاق خاطرة
يُعد React2Shell من أخطر ثغرات نظام JavaScript في السنوات الأخيرة، ليس لتعقيد الثغرة، بل لاختراق RSC لأدوات اليوم. الآن، وبعد توافر التحديثات في جميع أنحاء النظام، يجب على الفرق إطلاق التحديثات في مرحلة الإنتاج بأسرع وقت ممكن.
إذا كان تطبيقك يستخدم ميزات خادم React، سواء بشكل مباشر أو غير مباشر، فيجب عليك معالجة هذه الثغرة الأمنية باعتبارها إصلاحًا ذا أولوية قصوى.





