Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-55182 — استغلال إثبات المفهوم لـ CVE-2025-55182، يوضح RCE غير المصادق عليه في React Server Components عبر إلغاء التسلسل غير الآمن لـ Server Actions، مع خطوات إعادة إنتاج مفصلة وإرشادات التخفيف. | Kitploit
أدوات/GitHubGitHub/topstar88/cve-2025-55182
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويبالتعلم والتعليمتطوير الحمولات
GitHubtopstar88/cve-2025-55182

CVE-2025-55182

استغلال إثبات المفهوم لـ CVE-2025-55182، يوضح RCE غير المصادق عليه في React Server Components عبر إلغاء التسلسل غير الآمن لـ Server Actions، مع خطوات إعادة إنتاج مفصلة وإرشادات التخفيف.

عرض المستودع
2منذ 9 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2025-55182

يحتوي هذا المستودع على نسخة طبق الأصل (PoC) من CVE-2025-55182، وهي ثغرة أمنية خطيرة في مكونات خادم React (RSC) تسمح بتنفيذ تعليمات برمجية عشوائية بدون مصادقة.

وصف

توجد الثغرة في طريقة إلغاء تسلسل مكونات خادم React لـ"إجراءات الخادم" من طلبات العميل. على وجه التحديد، فشلت دالة requireModule في التحقق من أن اسم التصدير المطلوب هو خاصية مباشرة للوحدة. سمح هذا للمهاجمين بالوصول إلى خاصية constructor للدوال المصدرة، والحصول على مرجع إلى منشئ الدوال العام Function، والذي يمكن استخدامه لتنفيذ تعليمات برمجية عشوائية.

إعادة الإنتاج

يستخدم هذا الإثبات (PoC) بيئة Node.js بسيطة لعزل الثغرة في مكتبة react-server-dom-webpack، فقط للتأكد من أن الاستغلال يوضح الخلل في المكتبة نفسها، وليس سوء تكوين في إطار عمل.

المتطلبات الأساسية

  • Node.js
  • npm

التثبيت

root@kitploit:~
npm install

[!NOTE] ملف package.json مثبت على الإصدار الضعيف 19.0.0.

إثبات المفهوم

  1. ابدأ تشغيل الخادم الضعيف

يقوم هذا البرنامج النصي بإعداد خادم HTTP خام يستخدم وقت تشغيل React الضعيف لفك تشفير الطلبات.

root@kitploit:~
# tty1
node --conditions react-server server.js
  1. شغّل برنامج الاستغلال

في محطة طرفية منفصلة، شغّل الاستغلال. يرسل هذا حمولة Flight خبيثة إلى الخادم.

root@kitploit:~
# tty2
node exploit.js id

يجب أن ترى مخرجات الأمر في الرد:

المخرجات المتوقعة:

root@kitploit:~
Response: uid=0(root) gid=0(root) groups=0(root)

تحليل

لماذا حدثت الثغرة؟

دالة requireModule في ReactFlightDOMServerNode.js كانت تثق ببساطة في أي name يرسله العميل. كانت تنفذ moduleExports[metadata[NAME]] دون التحقق مما إذا كانت هذه الخاصية مخصصة للإفصاح فعلاً. لذلك، إذا قال العميل "أخي، أريد هذه الخاصية"، كان الخادم يقول "طبعاً! تفضل يا صاح".

لماذا يعتبر السماح بالوصول إلى أي خاصية فكرة سيئة؟

لأنها تسمح لأي شخص بالوصول إلى سلسلة النموذج الأولي، حتى constructor، وهو أمر خطير جداً. إذا كانت الوحدة تُصدر دالة (مثل module.exports = () => {})، فإن constructor الخاص بها هو حرفياً منشئ الدوال العام Function.

لماذا يؤدي الحصول على منشئ Function إلى تنفيذ تعليمات برمجية (RCE)؟

بمجرد أن يحصل المهاجم على منشئ Function، يمكنه إساءة استخدام ميزة "إجراء الخادم المرتبط". يربط سلسلة تحتوي على تعليمات برمجية خبيثة به (ليصبح عملياً new Function("كود خبيث")). وعند تشغيلها، ينفذ الخادم أي كود يضعه المهاجم.

لماذا سيقوم React فعلياً بتشغيل تلك الدالة الخبيثة؟

لأن إجراءات الخادم يمكن تشغيلها بواسطة معرف. إذا صمم المهاجم حمولة تحتوي على معرف إجراء يشير إلى مرجع module#constructor الخاص به، يقوم React بحلّه كإجراء عادي وتنفيذه. هذا "الإجراء" هو في الواقع دالته الخبيثة.

لماذا لم يتم التحقق من أي من هذا؟

كان النظام يفترض أن id و name من بيانات تعريف مرجع الخادم سيشيران دائماً إلى تصديرات صالحة محددة من قبل المطور. لم يكن هناك فحص أمان مثل hasOwnProperty للتأكد من أن الخاصية المطلوبة هي تصدير حقيقي وليست شيئاً موروثاً من سلسلة النموذج الأولي.

لماذا server.js بدلاً من Next.js؟

أستخدم server.js خام (ومساعد webpack-runtime.js) لتكوين وقت تشغيل مكونات خادم React يدوياً. يسمح لنا هذا بما يلي:

  1. فرض الإعداد الضعيف: لا يعمل الاستغلال إلا إذا تم تصدير الوحدة كدالة (module.exports = fn). قد يغير المُجمِّع الحقيقي طريقة تغليف التصديرات حسب إعداداته.
  2. عزل الخلل: هذا يسمح لنا بإظهار أن المشكلة داخل react-server-dom-webpack، وليس Next.js.
  3. إعادة إنشاء بيئة المُجمِّع: يفترض react-server-dom-webpack أنه يعمل داخل حزمة Webpack. ملف webpack-runtime.js الخاص بنا يوفر له المتغيرات العامة التي يتوقعها (__webpack_require__, __webpack_chunk_load__). هذا ليس محاكاة للثغرة، بل فقط توفير الحد الأدنى من وقت التشغيل الذي تحتاجه المكتبة للعمل فعلاً.

ملاحظات

كانت هناك مناقشات حول "إثباتات غير صالحة" تعمل فقط إذا تعمد المطور كشف أشياء خطيرة مثل child_process.exec.

إثباتنا ليس واحداً من هذه. إنه يعمل على إعداد عادي وآمن.

  1. الدالة المكشوفة غير ضارة يعرض التطبيق دالة بسيطة updateProfile تعيد سلسلة فقط ولا شيء مريب، لا أوامر شل.

  2. الاستغلال يهرب بالكامل من تلك الدالة تسمح الثغرة للمهاجم بتجاهل التصدير الآمن والانتقال مباشرة إلى updateProfile.constructor، وهو منشئ الدوال العام Function.

  3. المشكلة الأساسية هي الوصول إلى الخاصية كان يجب على React ألا يسمح بالوصول إلى .constructor. لم يقصد المطور كشف منشئ Function، بل قام إلغاء التسلسل غير الآمن بذلك نيابة عنه.

الشرط الوحيد الحقيقي هو أن تصدر الوحدة دالة مباشرة (module.exports = fn)، وهو أمر شائع جداً في CommonJS والعديد من إعدادات المُجمِّع.

الحمولة

تقوم الحمولة في exploit.js بصياغة رسالة Flight من React تحتوي على ثلاث قطع:

  • القطعة 0: تشير إلى مرجع خادم محدد في القطعة 1.
  • القطعة 1: تعلن عن مرجع الخادم:
    • id: "user-profile-action#constructor"، بمعنى "أعطني المنشئ".
    • bound: تشير إلى القطعة 2، التي تحتوي على الوسائط.
  • القطعة 2: ["console.log('nice try, diddy!')"]: سلسلة التعليمات البرمجية الخبيثة.

عندما يقوم React بإلغاء تسلسل هذا:

  1. يحل user-profile-action.
  2. يقرأ الخاصية .constructor => يحصل على الدالة العامة Function.
  3. يربط السلسلة التي قدمها المهاجم بها.
  4. ينفذ فعلياً: new Function("console.log('nice try, diddy!')")

وهذا هو تنفيذ التعليمات البرمجية (RCE)!

التخفيف

قم بالترقية فوراً إلى الإصدارات المصححة:

  • react-server-dom-webpack >= 19.0.1
  • react-server-dom-parcel >= 19.0.1
  • react-server-dom-turbopack >= 19.0.1

يقدم التصحيح فحوصات hasOwnProperty لمنع الوصول إلى الخصائص الموروثة ويقيد تحميل ملفات base64.

إذا قمت بتشغيل هذا الإثبات ضد إصدار مصحح، سيتعطل الخادم أو يظهر خطأ:

root@kitploit:~
$ node --conditions react-server server.js
Listening on http://localhost:3000
/path/to/CVE-2025-55182/node_modules/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js:2726
            resolvedValue = resolvedValue.bind.apply(
                                          ^

TypeError: Cannot read properties of undefined (reading 'bind')
    at /path/to/CVE-2025-55182/node_modules/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js:2726:43
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

Node.js v20.19.3

هذا يؤكد أن الاستغلال فشل في الوصول إلى خاصية constructor (أرجعت undefined بدلاً من Function)، وبالتالي فشلت استدعاء .bind اللاحق.

إخلاء مسؤولية

هذا الكود لأغراض تعليمية واختبارية فقط. لا تستخدم هذا الاستغلال ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.

الترخيص

مُصدَر بموجب DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE.

تنزيل الأداة