بحث أطروحة الماجستير حول CVE-2025-55182 (React2Shell). إطار عمل استغلال معياري يضم 6 سيناريوهات هجوم (RCE، استخراج البيانات، تشويه الموقع)، وقشرة عكسية تفاعلية، ومختبر كامل قابل للاستغلال لدراسة تلوث النموذج الأولي (Prototype Pollution) وإلغاء التسلسل غير الآمن (Insecure Deserialization) في مكونات خادم React.
إلغاء تسلسل البيانات غير الموثوقة + تلوث النموذج الأولي في مكونات خادم React
تنفيذ تعليمات برمجية عن بُعد دون مصادقة عبر Server Actions في Next.js
الإصدارات المتأثرة: React 19.0.0 - 19.2.0 · التصحيح: React 19.0.1 / 19.1.2 / 19.2.1 (3 ديسمبر 2025)
عرض توضيحي للاستغلال المتقدم - أوامر RCE الأساسية، قشرة تفاعلية، ونواقل هجوم متعددة ضد تطبيق Next.js ضعيف
يحتوي هذا المستودع على بحث رسالة الماجستير الخاص بي حول CVE-2025-55182، وهي ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) حرجة (CVSS v3.1: 10.0) في مكونات خادم React (React Server Components).
يعود أصل الثغرة إلى آلية إلغاء تسلسل غير آمنة في بروتوكول React Flight. عند معالجة Server Actions، تقوم Next.js بإلغاء تسلسل الأحمال متعددة الأجزاء (multipart) الواردة دون تحقق مناسب. يمكن للمهاجم إنشاء حمولة خبيثة تلوث سلسلة النموذج الأولي (prototype chain) وتحقن JavaScript عشوائية، تُنفَّذ على الخادم عبر مُنشئ Function (ومن ثم عبر child_process.execSync()).
ملاحظة بخصوص CVE-2025-66478: أصدرت Vercel CVE موازيًا لتتبع الأثر الخاص بـ Next.js لهذه الثغرة نفسها. ونظرًا لأن Next.js تدمج React بطريقة موَرّدة (vendored)، فإن العديد من أدوات فحص التبعيات لا تكتشفها تلقائيًا كإصدار ضعيف. وقد رفضت قاعدة البيانات الوطنية الأمريكية للثغرات (NVD) رسميًا اعتبار CVE-2025-66478 نسخة مكررة من CVE-2025-55182، رغم استمرار الإشارة إليها في النشرة الأمنية الصادرة عن Vercel.
ثغرات لاحقة: كشف فريق React لاحقًا عن مشكلتين إضافيتين موجودتين في إصدارات التصحيح الأولية (19.0.1, 19.1.2, 19.2.1): CVE-2025-55184 (حجب الخدمة، CVSS 7.5) وCVE-2025-55183 (كشف الكود المصدري، CVSS 5.3). يجب على المستخدمين الترقية إلى 19.0.2 أو 19.1.3 أو 19.2.2 لمعالجة الثغرات الثلاث جميعًا.
| الجانب | الوصف |
|---|---|
| أربع وحدات هجومية | حذف المشاريع، تشويه الموقع الإلكتروني، سرقة متغيرات البيئة، إيقاف تشغيل الخوادم |
| قشرة تفاعلية | قشرة مستمرة بأوامر خاصة وقدرات استعادة |
| استخراج مستقر للبيانات | قراءة سطرًا بسطر لتجاوز قيود حجم ترويسات HTTP |
| سكربت الاستعادة | استعادة آمنة للمختبر بعد الهجمات |
| توثيق أكاديمي | السبب الجذري، تفصيل الحمولة، والجدول الزمني للثغرة |
CVE-2025-55182/
├── README.md # This file
├── LICENSE # MIT License
│
├── exploit/
│ ├── exploit-explanation.md # Exploit usage documentation
│ └── react2shell.py # Main exploit — 4 attack modules + interactive shell
│
├── vulnerable-app/ # Vulnerable Next.js application
│ ├── README.md # Original vulnapp credits
│ ├── package.json # React 19.0.0 (vulnerable)
│ ├── app/ # Application source code
│ ├── curl_id.sh # Original exploit script (by zack0x01)
│ └── scripts/
│ └── restore.sh # Restoration script (my contribution)
│
└── docs/
├── screenshots/ # Exploitation demonstrations
│ ├── 01-app-initial.png
│ ├── 02-rce-basic.png
│ ├── 03-interactive-shell.png
│ ├── 04-no-payload.png
│ ├── 05-delete-result.png
│ ├── 06-deface.png
│ ├── 07-shutdown-servers.png
│ ├── 08-restore-from-script.png
│ └── 09-restore-from-interactive-shell.png
│
└── analysis/
├── 01-root-cause.md # Vulnerability root cause analysis
├── 02-payload-breakdown.md # Payload structure and execution flow
└── 03-timeline.md # CVE timeline
vulnerable-app/)cd vulnerable-app
npm install --legacy-peer-deps
npm run dev
# App available at http://localhost:3000
cd ../exploit
# Check if target is vulnerable
python3 react2shell.py -u http://localhost:3000 --check
# Execute single command
python3 react2shell.py -u http://localhost:3000 -c "whoami"
# Interactive shell mode
python3 react2shell.py -u http://localhost:3000 -i
| الوحدة | الأمر | الوصف | الأثر |
|---|---|---|---|
| حذف المشاريع | --delete-projects | يحذف جميع المشاريع من لوحة التحكم | تدمير البيانات |
| تشويه الموقع | --deface "message" | يستبدل الصفحة الرئيسية | تشويه |
| سرقة متغيرات البيئة | --steal-env | يسرق متغيرات البيئة | استخراج البيانات |
| إيقاف تشغيل الخوادم | --shutdown-servers | يوقف جميع الخوادم | حجب الخدمة (DoS) |
تستخدم مكونات خادم React آلية تسلسل/إلغاء تسلسل مخصصة (بروتوكول "Flight") لإرسال بيانات المكونات من الخادم إلى العميل. وعند معالجة إجراءات الخادم (Server Actions)، يقوم الخادم بإلغاء تسلسل الأحمال الواردة دون تحقق مناسب.
الخلل الأساسي هو الثقة السلوكية: يتحقق مُلغِي التسلسل من typeof obj.then === 'function' لتحديد كائنات Promise، دون التحقق من أن الخاصية تنتمي مباشرةً إلى الكائن. وهذا يسمح للمهاجم بتسميم Object.prototype.then، مما يجعل كل كائن عادي يظهر وكأنه كائن thenable.
يمكن للمهاجم إنشاء حمولة خبيثة تعمل على:
__proto__:thenFunction عبر $1:constructor:constructornew Function(_prefix)process.mainModule.require('child_process').execSync()X-Action-RedirectUser-mode (unauthenticated)
│
├─ POST / (Next.js Server Action endpoint)
│ ├─ Headers: Next-Action: x
│ └─ Multipart body with malicious JSON
│
└─ React Flight deserializer processes payload
└─ Prototype pollution via __proto__:then
└─ Function constructor reached via $1:constructor:constructor
└─ new Function(_prefix) executes attacker's JavaScript
└─ execSync() runs system command
└─ Output embedded in NEXT_REDIRECT error
└─ Next.js converts to X-Action-Redirect header
تؤثر الثغرة على أي تطبيق Next.js يستخدم App Router مع مكونات خادم React — وهو التكوين الافتراضي منذ Next.js 14. ليست هناك حاجة لتعريف Server Actions بشكل صريح؛ فمجرد وجود حزم RSC المتأثرة كافٍ.
تسمح هذه الثغرة لمهاجم غير مصادَق بما يلي: