كشفت MongoDB عن ثغرة أمنية عالية الخطورة لتسرب معلومات غير مصادق عليها، يتم تتبعها باسم CVE-2025-14847 ويطلق عليها اسم MongoBleed (بعد HeartBleed)، مما يؤثر على العديد من إصدارات MongoDB Server القديمة والمدعومة. ويمكن استغلال الثغرة عن بعد من قبل مهاجمين غير مصادقين وبتعقيد منخفض، مما قد يؤدي إلى سرقة البيانات وبيانات الاعتماد الحساسة.
تظل مثيلات MongoDB المستضافة ذاتيًا معرضة للخطر حتى يتم تصحيحها، بينما تمت ترقية مثيلات MongoDB Atlas تلقائيًا ولا يلزم اتخاذ أي إجراء من جانب العميل.
كيف أعرف إذا كنت متأثراً؟
لتحديد ما إذا كانت بيئة MongoDB المحددة الخاصة بك عرضة لـ CVE-2025-14847، اتبع منطق الفرز أدناه. يرشدك هذا المخطط الانسيابي خلال عمليات التحقق اللازمة فيما يتعلق بنوع النشر وإصدار الخادم والأمور المهمة zlib تكوين الضغط:
CVE-2025-14847 ينبع من خلل في خادم MongoDB zlibيعتمد على منطق إلغاء ضغط رسائل الشبكة، والذي تتم معالجته قبل المصادقة. من خلال إرسال حزم شبكة مضغوطة ومشوهة، يمكن لمهاجم غير مصادق تشغيل الخادم لإساءة التعامل مع أطوال الرسائل التي تم فك ضغطها، مما يؤدي إلى إرجاع ذاكرة الكومة غير المهيأة إلى العميل. يسمح ذلك للمهاجمين بتسريب أجزاء من البيانات الحساسة في الذاكرة عن بعد دون بيانات اعتماد صالحة أو تفاعل المستخدم.
على مستوى التعليمات البرمجية، كان سبب الثغرة الأمنية هو معالجة الطول بشكل غير صحيح message_compressor_zlib.cpp. قام المنطق المتأثر بإرجاع حجم المخزن المؤقت المخصص (output.length()) بدلاً من الطول الفعلي للبيانات التي تم فك ضغطها، مما يسمح للحمولات الأصغر حجمًا أو المشوهة بكشف ذاكرة الكومة المجاورة.
ونظرًا لأنه يمكن الوصول إلى الثغرة الأمنية قبل المصادقة ولا تتطلب تدخل المستخدم، فإن خوادم MongoDB المعرضة للإنترنت معرضة للخطر بشكل خاص.
استنادًا إلى بيانات Wiz، تحتوي 42% من البيئات السحابية على مثيل واحد على الأقل من MongoDB في إصدار عرضة لـ CVE-2025-14847، بما في ذلك الموارد الداخلية والمكشوفة بشكل عام. لقد تمكن Wiz من التحقق من صحة العديد من الحالات التي تواجه الإنترنت باعتبارها قابلة للاستغلال.
أبلغت Censys عن ملاحظة 87 ألف حالة محتملة الضعف في جميع أنحاء العالم.
أصبحت برمجيات إكسبلويت العاملة متاحة للعامة منذ 26 ديسمبر 2025، وتم الإبلاغ عن التقارير الأولية عن الاستغلال في البرية بعد فترة وجيزة، وتمت إضافة الثغرة منذ ذلك الحين إلى CISA KEV.
تؤثر الثغرة الأمنية على MongoDB في الإصدارات من 8.2.0 إلى 8.2.2، ومن 8.0.0 إلى 8.0.16، ومن 7.0.0 إلى 7.0.27، ومن 6.0.0 إلى 6.0.26، ومن 5.0.0 إلى 5.0.31، ومن 4.4.0 إلى 4.4.29، وجميع إصدارات MongoDB Server v4.2، وv4.0، و إصدارات v3.6.
لاحظ أن Ubuntu ذكر في الأصل أن نفس الثغرة الأمنية أثرت على عدة حزم Ubuntu غير ذات صلة مثل rsync بسبب استخدامهم zlib، ولكن تم التراجع عن هذا لاحقًا.
-
قم بالترقية فورًا إلى أحد الإصدارات المصححة: 8.2.3 أو 8.0.17 أو 7.0.28 أو 6.0.27 أو 5.0.32 أو 4.4.30.
-
إذا لم يكن التصحيح الفوري ممكنًا، فقم بتعطيله
zlibالضغط عن طريق حذفه صراحة منnetworkMessageCompressorsأوnet.compression.compressors. وتشمل البدائل الآمنةsnappy,zstdأو تعطيل الضغط بشكل كامل. -
تقييد تعرض شبكة خوادم MongoDB (على سبيل المثال، قواعد جدار الحماية، والشبكات الخاصة).
-
راقب سجلات MongoDB بحثًا عن اتصالات المصادقة المسبقة الشاذة أو الأعطال غير المتوقعة (راجع منشور المدونة هذا من Eric Capuano للحصول على إرشادات اكتشاف إضافية، وأداة الكشف هذه من Florian Roth).
-
خطط لإجراء ترقيات لأي إصدارات MongoDB متبقية منتهية الصلاحية، لأنها تظل معرضة للخطر بشكل دائم.
يمكن لعملاء Wiz استخدام الاستعلام والاستشارات المعدة مسبقًا في Wiz Threat Center للبحث عن المثيلات الضعيفة في بيئتهم.
لمساعدة فرق الأمان في التحقق من إمكانية الاستغلال، نشرت Wiz Research قالب Nuclei مخصصًا (انظر أدناه) مصممًا لاكتشاف ما إذا كان خادم MongoDB عرضة لـ CVE-2025-14847 بشكل حاسم وآمن، دون سحب البيانات. يقوم هذا القالب بالتحقق من صحة الثغرة الأمنية عن طريق إرسال حزمة واحدة معدة تعمل على تشغيل حالة تسرب الذاكرة المحددة. ثم يقوم بتحليل استجابة الخادم لتوقيعات BSON المسربة، والتأكد من وجود الخلل دون الحاجة إلى المصادقة.
قالب النواة
id: CVE-2025-14847
info:
name: CVE-2025-14847 - Information Disclosure allowed in MongoDB Server
author: Wiz Research
severity: High
description: |
Mismatched length fields in Zlib compressed protocol headers may allow a read of uninitialized heap memory by an unauthenticated client in MongoDB.
metadata:
max-request: 1
tags: mongodb,memory-leak,network
tcp:
- host:
- "Hostname"
inputs:
- data: "2a0000000100000000000000dc070000dd0700003200000002789c636080028144064620050002ca0073"
type: hex
read-size: 1024
matchers:
- type: dsl
dsl:
- "contains(toupper(zlib_decode(substr(data, 25))), 'BSON')"
- "contains(toupper(data), 'BSON')"
condition: or
كيف تساعد طريقة الكشف هذه المدافعين
بينما تم نشر استغلال إثبات المفهوم الأصلي بواسطة جو ديسيمون فعال في إظهار التأثير الحاسم من خلال جمع البيانات بقوة من ذاكرة الخادم، وقد تم تصميم قالب Nuclei هذا خصيصًا للتحقق من إمكانية الاستغلال بشكل آمن وبسيط. غالبًا ما تغمر الهجمات الواقعية التي تتم ملاحظتها على الخادم الخادم بآلاف الاتصالات لامتصاص كميات كبيرة من ذاكرة الوصول العشوائي (RAM). وفي المقابل، يرسل هذا القالب حزمة واحدة معدة خصيصًا. إنه فحص منخفض الكثافة يؤكد الثغرة الأمنية من خلال الكشف عن وجود توقيع BSON في مساحة الذاكرة غير المصرح بها، بدلاً من تحليل بيانات العميل الحساسة فعليًا.
كيف تعمل – الحزمة “السحرية”.
تعمل الثغرة الأمنية كمخزن مؤقت زائد للقراءة بسبب مشكلة ثقة في منطق إلغاء الضغط MongoDB Zlib. يسمح الخلل للمهاجم بإملاء حجم المخزن المؤقت للذاكرة الذي يخصصه الخادم بشكل تعسفي، بغض النظر عن مقدار البيانات المتوفرة فعليًا في الحمولة المضغوطة. تستغل الحمولة السداسية المستخدمة في هذا القالب هذا عن طريق تغليف مستند BSON صالح وبسيط، على وجه التحديد "a": 1، داخل مشوهة OP_COMPRESSED رسالة. رأس هذه الرسالة (على وجه التحديد uncompressedSize field) من قبل المهاجم للكذب على الخادم، مدعيا أن البيانات سوف تتوسع إلى حجم أكبر بكثير مما هو صغير "a": 1 الحمولة تتطلب فعلا.
عندما يقوم الخادم بمعالجة هذه الحزمة، فإنه يثق في الرأس ويخصص مخزنًا مؤقتًا كبيرًا للكومة بناءً على الحجم المزيف للمهاجم. يحتوي هذا المخزن المؤقت في البداية على ذاكرة “قذرة” غير مهيأة من العمليات السابقة. عملية تخفيف الضغط يكتب الصغيرة "a": 1 الحمولة في بداية المخزن المؤقت ولكنها تترك بقية المساحة دون تغيير. وبسبب الثغرة الأمنية، يحاول الخادم تحليل هذا المخزن المؤقت بأكمله كـ BSON. يقرأ بنجاح أول مستند صالح، لكنه يستمر بعد ذلك في قراءة الذاكرة “القذرة” كما لو كانت جزءًا من دفق البيانات.
نظرًا لأن هذه الذاكرة غير المهيأة لا تكون صالحة أبدًا لـ BSON، فإن المحلل اللغوي يفشل حتمًا. والأهم من ذلك، أن رسالة الخطأ الناتجة غالبًا ما تقتبس وحدات البايت “غير الصالحة” التي واجهتها، مما قد يؤدي إلى تسريب بيانات حساسة مرة أخرى إلى العميل. تشرح هذه الآلية لماذا يعتبر الاستغلال الفعلي “لعبة حظ” تتطلب طلبات متعددة: يراهن المهاجم على أن الذاكرة غير المخصصة تحتوي على بيانات قيمة وأن الطريقة المحددة التي يفشل بها المحلل اللغوي ستكشف عنها كسلسلة قابلة للطباعة. ومع ذلك، فإن قالب النواة الخاص بنا يتجاوز هذه الحاجة إلى الحظ من خلال فحص التدفق الخام بحثًا عن علامات BSON في الاستجابة، مما يؤكد بشكل حاسم وجود التسرب دون الحاجة إلى استخراج أسرار قابلة للقراءة بنجاح.
