
إثبات المفهوم لـ CVE-2025-55182 ("React2Shell"). بيئة معبأة بالكامل في Docker توضح تنفيذ التعليمات البرمجية عن بُعد (RCE) عبر إلغاء تسلسل غير آمن في مكونات خادم React. يتضمن أهدافًا ضعيفة لكل من Vanilla React (Express) و Next.js، مع سكربت استغلال Python مخصص.
⚠️ إخلاء مسؤولية: للاستخدام التعليمي فقط يحتوي هذا المستودع على كود استغلال فعّال لثغرة حرجة (CVSS 10.0). وهو مخصص strictly للبحث الأكاديمي والتحليل الأمني والأغراض التعليمية. لا تستخدم هذا الكود ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها. المؤلف غير مسؤول عن أي إساءة استخدام.
يوثّق هذا المشروع ويعرض CVE-2025-55182، وهي ثغرة حرجة في تنفيذ التعليمات البرمجية عن بُعد (RCE) تقع في بنية React Server Components (RSC). غالبًا ما يُشار إليها باسم "React2Shell"، وتسمح هذه الثغرة للمهاجمين عن بُعد غير المصادَق عليهم بتنفيذ تعليمات برمجية عشوائية على الخادم من خلال التلاعب ببروتوكول التسلسل "Flight" المستخدم بواسطة react-server.
توفر هذه المنصة المخبرية بيئة Docker معزولة ومنضبطة لتحليل الثغرة في سيناريوهين مختلفين:
react-server-dom-webpack و Express.يتم تنسيق البيئة عبر Docker Compose وتتكون من ثلاث حاويات معزولة متصلة بشبكة داخلية خاصة (research-net).
| الخدمة | السياق | الوصف | المكوّن الهش |
|---|---|---|---|
vanilla-target | vanilla-rsc/ | خادم Express بسيط ينفّذ بروتوكول RSC يدويًا. | [email protected] |
nextjs-target | nextjs-app/ | تطبيق Next.js قياسي يستخدم App Router. | [email protected] (تنفيذ react-server) |
attacker | exploit/ | بيئة Python تحتوي على سكربتات الاستغلال. | N/A |
تنبع الثغرة من إلغاء تسلسل غير آمن (CWE-502) داخل محلل بروتوكول Flight. من خلال حقن حمولة multipart مصممة بعناية تحتوي على بنية chunk "مزوّرة"، يمكن للمهاجم:
.then لكائن شبيه بـ promise.$B).Function() لتجميع وتنفيذ JavaScript عشوائي (مثل child_process.execSync).استنساخ المستودع:
git clone https://github.com/trax69/cve-2025-55182-poc.git
cd cve-2025-55182-poc
بناء وتشغيل المنصة المخبرية:
docker-compose up -d --build
انتظر حتى تُهيَّأ الحاويات بالكامل. قد تستغرق حاوية Next.js بضع دقائق لإكمال البناء الأول.
توجد منطق الاستغلال داخل exploit/exploit.py. يمكنك تشغيل الهجمات من جهازك المضيف (إذا كان Python مثبتًا) أو مباشرة من حاوية attacker.
الوصول إلى shell المهاجم:
docker-compose exec attacker bash
تثبيت المتطلبات:
pip install -r requirements.txt
مهاجمة الهدف أ (Vanilla React):
python exploit.py http://vanilla-target:4000/rsc vanilla
مهاجمة الهدف ب (Next.js):
python exploit.py http://nextjs-target:3000/ nextjs
يحاول الاستغلال إنشاء ملف باسم pwned.txt داخل دليل /tmp على الخادم الضحية. للتحقق من النجاح:
# Check Vanilla Server
docker-compose exec vanilla-target ls -la /tmp/pwned.txt
# Check Next.js Server
docker-compose exec nextjs-target ls -la /tmp/pwned.txt
إذا نجح الاستغلال، سترى قائمة الملف. إذا فشل، فلن يكون الملف موجودًا.
لمعالجة هذه الثغرة في بيئات الإنتاج:
react-server-dom-webpack (والحزم ذات الصلة) إلى الإصدار 19.0.1 أو 19.1.2 أو 19.2.1+."$1:__proto__" أو استخدامات غير معتادة لـ "$@" في أجسام multipart.مشروع جامعي - تدقيق أمني وبحث في الثغرات