
شرح تقني مفصّل لثغرة CVE-2025-55182 (React2Shell)، يتتبّع التفاصيل الداخلية لبروتوكول Flight الخاص بـ React لشرح سلسلة الاستغلال، وصياغة الحمولة، وتحليل الإصلاح.
المؤلف: Kavienan J
اكتشاف الثغرة بواسطة: lachlan2k، الذي أبلغ عنها بشكل مسؤول لفريق React.
للحصول على تحديثات حول هذه الثغرة، زر: react2shell.com
ReactFlightReplyServer.jsمصنف بدرجة في الشدة. إذا نظرت إلى إثباتات المفهوم العامة (PoCs)، ربما لاحظت أنه بينما تظهر نجاح الاستغلال، فإن التفسيرات لـ ظهور الحمولة بهذا الشكل قد تكون غير كافية - وهو أمر منطقي بالنظر إلى تعقيد بروتوكول React Flight. Flight، طبقة التسلسل وراء مكونات خادم React وإجراءات الخادم، هو آلة حالة معقدة تتكون من أكثر من 1,100 سطر، وسلوكها ليس بديهيًا إلا إذا تتبعت الكود بنفسك.
إثباتات المفهوم المجتمعية تظهر الثغرة بوضوح:
…ولكن عندما تحاول الإجابة على "لماذا يعمل هذا؟"، سرعان ما تجد نفسك تغوص في أعماق داخلية لـ React لم يُقصد أبدًا قراءتها سطرًا بسطر.
ملاحظة: العديد من إثباتات المفهوم تنسب الإصلاح بشكل خاطئ إلى تغييرات في
requireModule. كما سنرى في الإصلاح، فإن حمولة الاستغلال لا تصل أبدًا إلى تلك الدالة - الكود الضعيف الفعلي يقع بالكامل فيReactFlightReplyServer.js.
هذه المقالة هي محاولتي لفهم سلسلة الاستغلال بشكل عكسي من خلال تتبع منطق فك التشفير وتهيئة الأجزاء في React خطوة بخطوة. كل سلوك نوقش هنا يأتي مباشرة من كيفية عمل ReactFlightReplyServer.js قبل الإصلاح (المرجع: https://github.com/facebook/react/blob/v19.2.0/packages/react-server/src/ReactFlightReplyServer.js)، مبسط ومختصر بحيث يمكن لمطور React/JS متابعتها بصبر كافٍ.
القسم التالي: خلفية