
CVE-2025-55182 + CVE-2025-66478 - Next.js/React Server Components تنفيذ التعليمات البرمجية عن بُعد
يحتوي هذا المستودع على استغلال لإثبات المفهوم (PoC) للثغرة CVE-2025-55182، وهي ثغرة حرجة في تنفيذ التعليمات البرمجية عن بُعد (RCE) تؤثر على React Server Components في إصدارات React 19.x وإصدارات Next.js 15.x و16.x عند استخدام App Router. حصلت الثغرة على درجة CVSS تبلغ 10.0، مما يمثل خطرًا شديدًا.
يكمن جوهر الثغرة في المعالجة غير السليمة لإلغاء التسلسل (deserialization) داخل React Server Components. على وجه التحديد، يستغل الاستغلال آلية إلغاء التسلسل @ للتلاعب بكائن Chunk والاستيلاء على خاصية then الخاصة به. من خلال تعيين status إلى RESOLVED_MODEL، يتم استدعاء الدالة initializeModelChunk مع كائن مزيف يتحكم فيه المهاجم بالكامل. وهذا يسمح بالتلاعب بكائن _response، مما يؤدي في النهاية إلى تنفيذ تعليمات برمجية عشوائية.
يستهدف الاستغلال عملية إلغاء تسلسل Blob، وتحديدًا استدعاء response._formData.get، لحقن تعليمات برمجية يتحكم فيها المهاجم يتم تنفيذها بعد ذلك.
يوفر السكربت exploit.py إثبات مفهوم (PoC) يوضح الثغرة. يقوم بصياغة حمولة خبيثة تتلاعب بعملية إلغاء التسلسل لتنفيذ أمر على الخادم المستهدف.
@: يستخدم الاستغلال آلية إلغاء التسلسل @ للسيطرة على كائن Chunk.Chunk.prototype.then: يتم استبدال خاصية then في النموذج الأولي (prototype) لكائن Chunk، بحيث يتم استدعاء تعليمات برمجية يتحكم فيها المهاجم عند انتظار/حل الكتلة (chunk).RESOLVED_MODEL: يؤدي تعيين حالة الكتلة status إلى RESOLVED_MODEL إلى تشغيل الدالة initializeModelChunk، والتي تتفاعل مع كائن _response الذي يتحكم فيه المهاجم._formData.get: يتلاعب الاستغلال بـ response._formData.get لإرجاع دالة تحتوي على تعليمات برمجية يتحكم فيها المهاجم. يتم تنفيذ هذه الدالة بعد ذلك.pip install -r requirements.txt.احفظ السكربت: احفظ كود Python المقدم كـ exploit.py.
شغّل السكربت: نفّذ السكربت من سطر الأوامر، مع توفير عنوان URL المستهدف والأمر المراد تنفيذه كوسائط:
python exploit.py <target_url> <command_to_execute>
على سبيل المثال:
python exploit.py http://localhost:3000 "ls -l"

تم توفير إثبات المفهوم هذا "كما هو" دون أي ضمان. المؤلف غير مسؤول عن أي إساءة استخدام أو ضرر ناتج عن هذا السكربت. استخدمه على مسؤوليتك الخاصة.