CVE-2025-14847 — MongoBleed
- الثغرة CVE-2025-14847 (MongoBleed) تُسرّب ذاكرة الكومة لخادم MongoDB دون مصادقة.
- السبب الجذري هو الوثوق بقيمة uncompressedSize المُرسَلة من العميل أثناء فك ضغط OP_COMPRESSED.
- قد تكشف الذاكرة المُسرّبة أسماء المستخدمين وكلمات المرور والرموز والإعدادات؛ رقّ إلى الإصدارات المُصلَّحة.
CVE-2025-14847، المعروفة أيضًا باسم MongoBleed، هي ثغرة تتيح للمهاجمين قراءة بيانات غير مصرّح بها من ذاكرة الكومة للخادم الذي يشغّل MongoDB — دون أي مصادقة.
MongoDB هي قاعدة بيانات NoSQL مفتوحة المصدر موجّهة نحو المستندات. تخزّن البيانات بتنسيقات مثل JSON و BSON و XML، وتدعم عمليات البحث والحذف والتحديث على تلك البيانات.
الخلفية
تستخدم MongoDB بروتوكولًا قائمًا على المقابس يُسمى MongoDB Wire Protocol بين العميل والخادم. وبعد إنشاء الاتصال، يجري التواصل عبر إرسال واستقبال حزم رسائل OP_MSG. ولنقل الحمولات الكبيرة بأداء عالٍ، تستخدم MongoDB تنسيق الحزمة OP_COMPRESSED.
المعامل الذي يهم هو uncompressedSize — «الحجم الذي ستشغله البيانات المضغوطة المُرسَلة من العميل إلى الخادم في الذاكرة بمجرد فك ضغطها على الخادم».
السبب الجذري
// line 72 — client value assigned to length length = uncompressedSize; // line 73 — uncompress computes the real size into length uncompress(output.data(), &length, input.data(), input.size()); // line 83 — ROOT CAUSE // length was updated, but output.length() still returns the client's size! return SharedBuffer::allocate(output.length());
داخل decompressData، تُخصَّص الذاكرة وفقًا لقيمة uncompressedSize التي يوفّرها العميل. وتُقرأ البيانات من كومة الخادم بالحجم الذي اختاره العميل، وتُعاد إلى العميل كما لو كانت نتيجة فك الضغط. وقد تحتوي الذاكرة المُسرَّبة على أسماء مستخدمين وكلمات مرور ورموز وبيانات إعدادات النظام.
تسريب BSON
تُسلسَل الكائنات في MongoDB وتُفكّك سلسلتها للعميل بتنسيق BSON (Binary JSON). وأثناء التحليل، يُكتشَف نهاية القيمة عبر مُنهٍ فارغ \0. وعندما لا ينتهي BSON المُقدَّم من العميل بـ \0، تستمر Mongo في فحص المنطقة المخصَّصة بحثًا عنه. وبما أنه لا يتشكّل كائن BSON صالح، يُطرَح خطأ — وتسرّب رسالة الخطأ تلك محتويات الذاكرة.
الإصلاح
جرى حل الثغرة باستخدام الطول الحقيقي للبيانات المفكوكة الضغط أثناء عملية decompressData، بدلًا من القيمة المُقدَّمة من العميل.
- 8.2.x — 8.2.2 وما قبله
- 8.0.x — 8.0.16 وما قبله
- 7.0.x — 7.0.27 وما قبله
- 6.0.x — 6.0.26 وما قبله
- 5.0.x — 5.0.31 وما قبله
الأسئلة الشائعة
ما هي MongoBleed (CVE-2025-14847)؟
تسريب لذاكرة الكومة في MongoDB دون مصادقة. بإرسال حزمة OP_COMPRESSED مُصاغة، يجعل المهاجم الخادم يُعيد ذاكرة أكثر من المقصود، فتتسرّب محتويات الكومة مثل بيانات الاعتماد والرموز إلى العميل.
ما الإصدارات المتأثرة وكيف أُصلحها؟
الإصدارات حتى 8.2.2 و8.0.16 و7.0.27 و6.0.26 و5.0.31 متأثرة. يستخدم الإصلاح الطول الحقيقي بعد فك الضغط بدل قيمة العميل، والترقية إلى إصدار مُصلَّح تُغلق التسريب.

