
استغلال، مختبر، ماسح - خارجي وحاوية دوكر، لـ SMongobleed-CVE-2025-14847 بالإضافة إلى رافع الأمان phoenix
CVE-2025-14847 | CVSS 8.7 (عالي) | تسريب غير مصادق عليه للذاكرة
CVE-2025-14847، المسمى MongoBleed، يسمح للمهاجمين عن بُعد غير مصادق عليهم بتسريب ذاكرة كومة غير مهيأة عن طريق استغلال منطق فك الضغط zlib في MongoDB. هذا الخلل عالي الخطورة يكشف آثارًا حساسة، بما في ذلك بيانات الاعتماد النصية العادية ورموز الجلسات، مما يوفر خريطة طريق للحركة الجانبية والاستيلاء الكامل على الخادم.
| الجانب | التفاصيل |
|---|---|
| ما هو الثغرة | طبقة نقل شبكة MongoDB باستخدام ضغط zlib |
| الخطورة | عالية (CVSS 8.7/7.5) |
| التأثير | تسريب غير مصادق عليه عن بُعد لذاكرة كومة غير مهيأة |
| لماذا يهم | تحتوي الشظايا المسربة على كلمات مرور قواعد البيانات، مفاتيح AWS السرية، وحالات الخادم الداخلية |
| حالة الاستغلال | برهان المفهوم العام (PoC) "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 النظام │
│ - بيانات اتصالات العملاء │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
| الإصدار | النطاق الضعيف | الإصدار المصحح | الحالة |
|---|---|---|---|
| 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 | جميع الإصدارات | لا يوجد | ⚠️ نهاية الدعم |
| 4.0.x | جميع الإصدارات | لا يوجد | ⚠️ نهاية الدعم |
| 3.6.x | جميع الإصدارات | لا يوجد | ⚠️ نهاية الدعم |
| التاريخ | الحدث |
|---|---|
| 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 # برهان استغلال تسريب الذاكرة
│ ├── 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
cd code-scan
# مسح مشروع بحثًا عن إصدارات MongoDB الضعيفة
python3 main.py scan /path/to/project
# مسح ورفع إلى Phoenix
python3 main.py scan /path/to/project --upload-phoenix
# تشغيل الاختبارات
python3 main.py test
# === مختبر الاستغلال ===
# بدء المختبر
cd exploit && docker-compose up -d && sleep 10
# تشغيل الاستغلال (المثيل الضعيف)
python3 exploit/mongobleed.py --host localhost --port 27017
# تشغيل الاستغلال (المثيل المصحح - تحقق من عدم وجود تسريبات)
python3 exploit/mongobleed.py --host localhost --port 27018
# === ماسح الشبكة ===
# مسح المختبر المحلي
python3 scanner/mongobleed_scanner.py localhost:27017 localhost:27018
# مسح شبكة
python3 scanner/mongobleed_scanner.py 192.168.1.0/24 --threads 20
# === ماسح الشفرة ===
# مسح الدليل الحالي
python3 code-scan/main.py scan .
# مسح مع إخراج JSON
python3 code-scan/main.py scan /path/to/project --json --output results.json
# مسح ورفع إلى Phoenix
python3 code-scan/main.py scan /path/to/project --upload-phoenix