
مختبر الاستغلال، docker وماسح الكود لثغرة mongobleed CVE-2025-14847 بالإضافة إلى أدوات Phoenix Security Sync
CVE-2025-14847 | CVSS 8.7 (عالي) | كشف غير مصادَق للذاكرة
📖 الوثائق الكاملة • 🔬 تحليل فني • ⚡ أوامر سريعة
MongoBleed هي ثغرة كشف حرجة للذاكرة في طبقة نقل الشبكة لـ MongoDB تسمح للمهاجمين عن بعد غير المصادق عليهم باستخراج ذاكرة كومة حساسة دون أي بيانات اعتماد أو تفاعل المستخدم.
| الفئة | الوصف |
|---|---|
| نوع الهجوم | كشف ذاكرة عن بعد غير مصادق عليه |
| السبب الجذري | إرجاع حجم المخزن المؤقت المخصص بدلاً من طول البيانات الفعلي بعد فك ضغط zlib |
| البيانات المكشوفة | كلمات مرور قاعدة البيانات، مفاتيح API، رموز الجلسات، بيانات اعتماد AWS، حالة الخادم الداخلية |
| الخطورة | CVSS 8.7 (عالي) - يمكن الوصول عبر الشبكة، لا يتطلب مصادقة |
| الاستغلال | استغلال نشط يُلاحظ في البيئة الحية منذ 28 ديسمبر 2025 |
| الفرع | ضعيف | تم الإصلاح | الإجراء |
|---|---|---|---|
| 8.2.x | 8.2.0 → 8.2.2 | 8.2.3 | الترقية فوراً |
| 8.0.x | 8.0.0 → 8.0.16 | 8.0.17 | الترقية فوراً |
| 7.0.x | 7.0.0 → 7.0.27 | 7.0.28 | الترقية فوراً |
| 6.0.x | 6.0.0 → 6.0.26 | 6.0.27 | الترقية فوراً |
| 5.0.x | 5.0.0 → 5.0.31 | 5.0.32 | الترقية فوراً |
| 4.4.x | 4.4.0 → 4.4.29 | 4.4.30 | الترقية فوراً |
| ≤4.2.x | جميع الإصدارات | لا يوجد | ⚠️ منتهي الدعم - الانتقال إلى إصدار مدعوم |
| الجانب | التفاصيل |
|---|---|
| ما هو الضعيف | طبقة نقل الشبكة لخادم MongoDB التي تستخدم ضغط zlib |
| الخطورة | عالي (CVSS 8.7/7.5) |
| التأثير | كشف غير مصادق عن بعد لذاكرة الكومة غير المهيأة |
| لماذا يهم | تحتوي الشظايا المسربة على كلمات مرور قاعدة البيانات، مفاتيح AWS السرية، وحالات الخادم الداخلية |
| حالة الاستغلال | Proof-of-Concept عامة "mongobleed" تم التحقق منها وتنتشر |
| ما يجب فعله اليوم | الترقية إلى الإصدارات المصححة فوراً أو تعطيل ضغط zlib |
توجد الثغرة في طبقة نقل الشبكة لـ MongoDB (message_compressor_zlib.cpp) حيث عيب حرج في منطق فك ضغط zlib يسمح للمهاجمين غير المصادقين بتسريب ذاكرة خادم حساسة.
// الكود الضعيف (قبل الإصلاح)
counterHitDecompress(input.length(), output.length());
return {output.length()}; // ❌ إرجاع حجم المخزن المؤقت المخصص
// الكود المُصحَح (بعد الإصلاح)
counterHitDecompress(input.length(), output.length());
return length; // ✅ إرجاع الطول الفعلي للبيانات بعد فك الضغط
┌─────────────────────────────────────────────────────────────────────────────┐
│ هجوم MongoBleed │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ المهاجم MongoDB الضعيف │
│ │ │ │
│ │ 1. إرسال رسالة OP_COMPRESSED │ │
│ │ uncompressedSize: 8192 (كذب) │ │
│ │ البيانات الفعلية: ~100 بايت │ │
│ │────────────────────────────────────> │
│ │ │ │
│ │ 2. تخصيص مخزن مؤقت بحجم 8192 بايت │
│ │ 3. فك ضغط ~100 بايت │
│ │ 4. العلة: إرجاع buffer.length()=8192 │
│ │ 5. محلل BSON يقرأ ذاكرة غير مهيأة │
│ │ │ │
│ │ 6. استجابة خطأ تحتوي على ذاكرة │ │
│ │ مسربة كـ "أسماء حقول" │ │
│ │<──────────────────────────────────── │
│ │ │ │
│ 🔓 البيانات المسربة: │ │
│ - مفاتيح API، كلمات مرور، رموز │
│ - الحالة الداخلية لـ MongoDB │
│ - إعدادات تخزين WiredTiger │
│ - معلومات /proc للنظام │
│ - بيانات اتصال العملاء │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
| التاريخ | الحدث |
|---|---|
| 15 ديسمبر 2025 | تم تحديد الثغرة؛ التذكرة الداخلية SERVER-115508 |
| 19 ديسمبر 2025 | تم إصدار الإصلاح، الكشف عن CVE-2025-14847 |
| 24 ديسمبر 2025 | تم تصحيح أسطول MongoDB Atlas |
| 26 ديسمبر 2025 | إصدار PoC العامة "mongobleed" |
| 28 ديسمبر 2025 | ملاحظة استغلال في البيئة الحية |
🔬 راجع التحليل الفني ← للحصول على تشريح تفصيلي للثغرة، بناء الاستغلال، وطرق الكشف.
mongobleed-exploit-CVE-2025-14847/
├── exploit/ # 🔴 مختبر الاستغلال
│ ├── docker-compose.yml # نسخ MongoDB ضعيفة ومصححة
│ ├── mongobleed.py # PoC استغلال تسرب الذاكرة
│ ├── init/init-mongo.js # بيانات اختبار حساسة
│ ├── test-exploit.sh # سكربت اختبار المختبر
│ └── README.md # وثائق المختبر
│
├── scanner/ # 🌐 ماسح الشبكة
│ ├── mongobleed_scanner.py # ماسح ضعف IP/نطاق
│ ├── sample-targets.txt # ملف أهداف عينة
│ └── README.md # وثائق الماسح
│
├── code-scan/ # 📂 ماسح الكود
│ ├── main.py # نقطة دخول CLI
│ ├── scanners/ # ماسحات Docker، Python، البنية التحتية
│ ├── models/ # نماذج الاكتشاف، الضعف
│ ├── integrations/ # رفع إلى Phoenix Security
│ └── README.md # وثائق ماسح الكود
│
└── original-exploit/ # 📚 مرجع PoC الأصلي
cd exploit
# بدء المختبر (نسخ ضعيفة + مصححة)
docker-compose up -d
sleep 10
# اختبار النسخة الضعيفة (يجب أن تسرب ذاكرة)
python3 mongobleed.py --host localhost --port 27017
# اختبار النسخة المصححة (يجب ألا تسرب ذاكرة)
python3 mongobleed.py --host localhost --port 27018
# اختبار المختبر الكامل
./test-exploit.sh
cd scanner
# مسح مضيف واحد
python3 mongobleed_scanner.py 192.168.1.100
# مسح نطاق شبكة
python3 mongobleed_scanner.py 192.168.1.0/24
# مسح من ملف
python3 mongobleed_scanner.py @sample-targets.txt --json --output results.json