تعرف على المزيد عن كتاب بيني تشارني «الأمن السيبراني رأسًا على عقب»

اعرف أكثر
نستخدمُ الذكاء الاصطناعي في ترجمات الموقع، ومع أننا نسعى جاهدين لبلوغ الدقة قد لا تكون هذه الترجمات دقيقةً بنسبة 100% دائمًا. تفهّمك لهذا الأمر هو موضع تقدير لدينا.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

بقلم OPSWAT

Mongoose هي مكتبة نمذجة بيانات الكائنات (ODM) لـ MongoDB التي تبسط تفاعلات قاعدة البيانات في تطبيقات Node.js. من خلال توفير حل قائم على المخطط، يمكّن Mongoose كائنات JavaScript من التعيين إلى مستندات MongoDB، حيث يعمل كطبقة تجريد تساعد على هيكلة البيانات لتسهيل الإدارة والتحقق من صحتها. مع ميزات مثل البرمجيات الوسيطة لتنفيذ المنطق المخصص ونظام بناء الاستعلامات البديهية، يعزز Mongoose كفاءة العمل مع MongoDB. وقد حصل Mongoose، الذي يوصف بأنه "نمذجة كائنات MongoDB الأنيقة لـ Node.js"، على 27 ألف نجمة على GitHub، مما يعكس استخدامه وتقديره على نطاق واسع بين المطورين.

برنامج زمالة OPSWAT واكتشاف الثغرات الأمنية الحرجة

يوفر برنامج زمالةOPSWAT لأمن البنية التحتية الحرجة في مجال الأمن السيبراني للخريجين في فيتنام، لطلاب الدراسات العليا خبرة عملية في تأمين البنية التحتية الحرجة. وكجزء من هذا البرنامج، تتاح للزملاء فرصة تحليل ومعالجة نقاط الضعف في الأمن السيبراني والتعاون مع خبراء OPSWAT الأمنية OPSWAT مجال الأمن السيبراني لمواجهة تحديات العالم الحقيقي في مجالات مثل اكتشاف البرمجيات الخبيثة وأمن الملفات والوقاية من التهديدات.

خلال برنامج زمالة OPSWAT يقوم المشاركون بشكل منهجي بفحص وإعادة إنتاج CVEs المعروفة عبر مختلف المنتجات والمكتبات وأنظمة التشغيل. وكجزء من هذه المبادرة، اختار دات فونغ - أحد زملائنا المتميزين - فحص برنامج Mongoose نظرًا لاعتماده على نطاق واسع في بيئات الإنتاج. في نوفمبر 2024، اكتشف ثغرة خطيرة في Mongoose أثناء إجراء تحليل متعمق للمكتبة. سمحت الثغرة للمهاجم باستغلال قيمة $where، مما قد يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد (RCE) على خادم تطبيق Node.js. بعد الإبلاغ الفوري عن المشكلة إلى شركة Mongoose، تم إصدار تصحيح كجزء من الإصدار 8.8.3، وتم الكشف عن CVE-2024-53900 في قاعدة بيانات الثغرات الوطنية (NVD).

CVE-2024-53900 و CVE-2025-23061 الجدول الزمني

  • 7 نوفمبر 2024: اكتشف دات فونغ ثغرة أمنية خطيرة في Mongoose وقدم تقريرًا أمنيًا إلى Snyk.
  • 26 نوفمبر 2024: أصدرت Mongoose الإصدار 8.8.3 لمعالجة هذه الثغرة وإصلاحها.
  • 2 ديسمبر 2024: كشفت قاعدة البيانات الوطنية للثغرات الأمنية (NVD) عن الثغرة الأمنية CVE-2024-53900 لهذه الثغرة.
  • 17 ديسمبر 2024 عند تحليل تصحيح Mongoose 8.8.3 من Mongoose، وجد Dat Phung تجاوزًا لا يزال يمكّن RCE (تنفيذ التعليمات البرمجية عن بُعد). تم إرسال تقرير أمني مفصل إلى Tidelift.
  • 13 يناير 2025: أصدرت Mongoose الإصدار 8.9.5، حيث قدمت تصحيحًا محسّنًا يعالج التجاوز بشكل فعال.
  • 15 يناير 2025: كشفت قاعدة بيانات الثغرات الأمنية الوطنية (NVD) رسميًا عن الثغرة الأمنية CVE-2025-23061، مؤكدةً على خطورة الثغرة المكتشفة حديثًا.

طريقة ملء () النمس في النمس

يوفر Mongoose أيضًا ميزة مفيدة تسمى ملء () التي تعزز القدرة على العمل مع العلاقات بين المستندات. بينما تحتوي إصدارات MongoDB ≥ 3.2 على عامل التجميع $ Lookup للوصلات، فإن ميزة MongoDB's populate() تقدم بديلاً أكثر قوة لاستبدال مرجع تلقائيًا بالبيانات المقابلة من المستندات ذات الصلة. يعد هذا مفيدًا بشكل خاص لإدارة العلاقات بين مجموعات MongoDB المختلفة، كما هو الحال عندما يشير مستند إلى مستند آخر بواسطة _id الخاص به. [2]

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
مخطط المؤلفين
الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
مخطط الكتب
الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
تطبيق Nodejs

عند تعريف مخطط في Mongoose، يمكن تعيين حقل للإشارة إلى نموذج آخر باستخدام خيار المرجع. ثم تُستخدم طريقة ملء() لاستبدال الحقل المشار إليه (معرف الكائن) بالمستند الكامل من النموذج ذي الصلة. على سبيل المثال، في تطبيق متجر كتب، يشير حقل المؤلف في bookSchema إلى مستند المؤلف، ويشير حقل المراجعة إلى مستند المراجعات. يُمكِّن الأسلوب (populate()) المطورين من استبدال حقل المؤلف (وهو معرّف كائن) بمستند المؤلف الكامل عند الاستعلام عن نموذج الكتاب.

يسمح ملء () للمطورين باستبدال حقل المؤلف (وهو معرف كائن) بمستند المؤلف الكامل عند الاستعلام عن نموذج الكتاب:

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
عدم استخدام ملء ()
الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
استخدام ملء ()

علاوةً على ذلك، يدعم أسلوب Mongoose's populate() الاستعلامات المخصصة لتحديد المستندات ذات الصلة التي يتم استرجاعها وكيفية جلبها. تسمح خصائص مثل المطابقة والخيارات للمطورين بتصفية المستندات ذات الصلة وفرزها وتقييدها وتخطيها، مما يوفر إمكانيات مرنة لاسترجاع البيانات.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
استعلام مخصص في ملء () في النمس

تحليل CVE-2024-53900

كجزءٍ من برنامج زمالة OPSWAT للدراسات العليا في مجال الأمن السيبراني، أثناء تحليل Mongoose لإعادة إنتاج نقاط الضعف المعروفة، أجرى Dat Phung مراجعة شاملة لطريقة العمل الداخلية لطريقة ملء () التي تلعب دورًا رئيسيًا في التعامل مع العلاقات بين مستندات MongoDB. تدعم طريقة ملء () وسيطات السلاسل والكائنات على حد سواء، ويمكن للمطورين استخدام خيار المطابقة لتطبيق عوامل تصفية محددة على البيانات التي يتم استرجاعها:

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

في المثال أعلاه، خيار المطابقة هو كائن تصفية يمكن أن يتضمن مشغّلات استعلام MongoDB، كما هو مفصّل في مشغّلات الاستعلام والإسقاط - دليل MongoDB الإصدار 8.0. أحد المشغلات البارزة هو $ حيث، والذي يتيح تنفيذ JavaScript مباشرةً على خادم MongoDB. ومع ذلك، فإن هذا التنفيذ على خادم MongoDB مقيّد، حيث يدعم العمليات والوظائف الأساسية فقط.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

أجرى Dat Phung تحليلًا متعمقًا لرمز مصدر Mongoose لفهم سير عمل أسلوب ملء(). وحدد أنه بعد أن يستدعي التطبيق أسلوب populate () على النموذج، يتم تشغيل الدالة populate(). ضمن هذه الدالة، يستدعي Mongoose الدالة _execPopulateQuery() ، والتي تقوم بتنفيذ الاستعلام باستخدام عامل التشغيل $where على خادم MongoDB. بعد ذلك، يتم استرداد جميع المستندات من المجموعة الخارجية لتجميعها في الخطوات التالية.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

بعد استرداد البيانات من MongoDB، يقوم Mongoose بتنفيذ دالة رد النداء _done()، والتي تستدعي _assign() لإعداد البيانات قبل "ضم" النموذجين عن طريق استدعاء دالة assignVals().

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

قد تنشأ الثغرة عندما تتم معالجة البيانات المسترجعة بواسطة دالة Mongoose's assignVals() . تقوم هذه الدالة بالتحقق مما إذا كان خيار المطابقة عبارة عن مصفوفة، وإذا كان الأمر كذلك، تقوم بتمرير كل عامل إلى دالة sift(). تقوم الدالة sift() ، التي يتم استيرادها من مكتبة خارجية تحمل نفس الاسم، بمعالجة هذه الاستعلامات محليًا على خادم التطبيق. تمثل هذه المعالجة المحلية خطرًا أمنيًا، خصوصًا عند معالجة المدخلات التي يتحكم بها المستخدم.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

لمزيد من التحقيق في ذلك، قام دات فونج بتعديل القيم في خيار المطابقة للتأكد من استيفاء الشروط، وبالتالي استدعاء دالة sift() لإجراء تحليل إضافي لتدفق البيانات.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

مع وضع الشرط في مكانه، تم تمرير عامل التشغيل $ حيث لاحقًا إلى دالة غربلة().

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

مكتبة sift هي أداة JavaScript خفيفة الوزن مصممة لتصفية مجموعات البيانات والاستعلام عنها مثل المصفوفات أو كائنات JSON باستخدام صيغة شبيهة ببنية MongoDB. وفقًا للوثائق الرسمية، "Sift هي مكتبة صغيرة لاستخدام استعلامات MongoDB في JavaScript." تقوم دالة sift() بتقييم عمليات التصفية الشبيهة ب MongoDB على خادم التطبيق بدلًا من خادم قاعدة البيانات، مما قد يعرّض النظام لمخاطر أمنية كبيرة عند معالجة مدخلات غير موثوق بها.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
مثال على كود Sift

استمرارًا لتحليله، حدّد زميلنا مشكلة في دالة createDefaultQueryTester() الخاصة بمكتبة الغربلة. تقوم هذه الدالة بتحويل كل عملية في مصفوفة المطابقة إلى دوال JavaScript قابلة للتنفيذ، والتي تُستخدم بعد ذلك لتصفية ومعالجة بيانات مستند MongoDB محليًا. ولتحقيق ذلك، تستدعي الدالة createDefaultQueryTester() الدالة createNamedOperation() ، وتمرير عمليات مثل $where من مصفوفة المطابقة كوسائط.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

لكل عملية في مصفوفة التطابق، يتحقق createNamedOperation من كل عملية في مصفوفة التطابق، ويتحقق من دعم العملية ثم يمررها إلى الدالة المقابلة.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

إذا كانت العملية بـ $ حيث، يتم إنشاء دالة JavaScript باستخدام قيمة "البارامز" الخام، والتي يتم اشتقاقها من عامل $ حيث في مصفوفة المطابقة ويمكن التحكم بها من قبل المستخدم.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

CVE-2024-53900 تفاصيل الاستغلال

بينما يحدّ MongoDB من تنفيذ دوال JavaScript عبر عملية $where، كما تم تحليلها سابقًا، تسمح دالة sift() بتنفيذ هذه الدوال دون مثل هذه القيود. يؤدي هذا النقص في التحقق من صحة المدخلات وتقييدها إلى ثغرة أمنية كبيرة، حيث يمكن استغلال قيمة "البارامز" - التي يتم التحكم فيها مباشرةً عن طريق إدخال المستخدم - مما قد يؤدي إلى هجمات حقن التعليمات البرمجية. لفحص هذه المشكلة بشكل أكثر شمولاً، أنشأ دات فونج الاستعلام التالي:

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

في البداية، فشل الاستعلام في تنفيذ عملية أخرى، مما أدى إلى حدوث الخطأ التالي:

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

يشير هذا الخطأ إلى أن Mongoose يحاول تنفيذ عملية $where على خادم MongoDB قبل تمرير التحكم إلى الدالة sift(). ومع ذلك، وبسبب القيود المفروضة على دوال JavaScript في شرط $where الخاص ب MongoDB، يحدث خطأ، مما يمنع تنفيذ الاستعلام. نتيجةً لذلك، يوقف Mongoose العملية قبل أن يتمكن من الوصول إلى دالة sift() .

لتجاوز هذا القيد، استفاد زميلنا من المتغير "العام" الموجود على خادم التطبيق، والذي لا يوجد على خادم MongoDB. سمحت له هذه الطريقة بتجاوز القيد على خادم MongoDB وتمكين الاستعلام من الوصول إلى دالة sift():

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

باستخدام هذه القيمة، عندما يقوم Mongoose بتنفيذ عملية $where على MongoDB، يؤدي غياب المتغير "global" إلى أن يُرجع المُشغِّل الثلاثي (typeof global != "undefined" ?global.process.mainModule.constructor._load("child_process").exec("calc") : 1) القيمة 1، مما يمنع MongoDB من إصدار خطأ. وبالتالي، يتم تنفيذ الاستعلام على خادم MongoDB دون أي مشاكل.

ومع ذلك، عندما تصل القيمة نفسها إلى الدالة sift() ، التي تعمل على خادم التطبيق حيث يتوفر المتغير "العام"، فإنها تؤدي إلى إنشاء الدالة التالية:

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

دليل إثبات مفهوم تنفيذ التعليمات البرمجية عن بُعد (RCE)

في مثال التطبيق الوارد في بداية المدونة، إذا قام أحد المهاجمين بإرسال الطلب التالي، فيمكنه تنفيذ هجوم تنفيذ التعليمات البرمجية عن بُعد (RCE) بنجاح:

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

يوضّح الفيديو إثبات صحة مفهوم CVE-2024-53900 الذي يؤثر على إصدارات Mongoose قبل الإصدار 8.8.3، والذي يفتقر إلى التحقق من صحة الإدخال المناسب لمنع إساءة استخدام عامل التشغيل $where إلى جانب مكتبة الغربلة.

إصلاح غير مكتمل و CVE-2025-23061

استنادًا إلى تقرير دات فونغ الأمني، قدمت شركة Mongoose تصحيحًا يهدف إلى حل الثغرة الأمنية التي تم تحديدها مسبقًا (CVE-2024-53900) قبل الكشف عنها علنًا. أضاف التصحيح ذو الصلة(Automattic/mongoose@33679bc) فحصًا لعدم السماح باستخدام $where ضمن خاصية المطابقة التي تم تمريرها إلى ملء ().

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

يتحقق هذا المقتطف مما إذا كانت خاصية المطابقة التي تم تمريرها إلى ملء () هي مصفوفة. إذا كانت كذلك، تقوم الشيفرة بتكرار كل كائن في المصفوفة لمعرفة ما إذا كان يحتوي على عامل التشغيل $where. إذا تم الكشف عن $where، يُرفع خطأ، مما يمنع الحمولة الخبيثة من الانتشار إلى دالة sift() الخطرة.

ونتيجةً لذلك، تفشل الحمولة التي تستغل CVE-2024-53900 في هذا الفحص لأن كائنًا في مصفوفة المطابقة يحتوي على $where، مما يمنعه فعليًا من الوصول إلى أداة الغربلة ().

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

بينما يحظر هذا التحديث بشكل صحيح الاستخدام المباشر لـ $where داخل مستوى تداخل واحد، إلا أنه يفشل في اكتشاف $where عند تضمينه داخل عامل تشغيل $ or - وهي بنية يدعمها كل من MongoDB ومكتبة الغربلة بشكل كامل.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
يدعم MongoDB عامل التشغيل $ أو
الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
تدعم مكتبة "غربلة" عامل التشغيل $ أو

ونتيجةً لذلك، يمكن للمهاجم تداخل $حيث تحت $أو للتهرب من فحص التصحيح أحادي المستوى. نظرًا لأن Mongoose لا يفحص سوى خصائص المستوى الأعلى لكل كائن في مصفوفة المطابقة، فإن حمولة التجاوز تبقى غير مكتشفة وتصل في النهاية إلى مكتبة الغربلة، مما يتيح تنفيذ عملية الإنفاذ الضار RCE.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
الحمولة المستخدمة لتجاوز الإصلاح في mongoose 8.8.3

إثبات مفهوم CVE-2025-23061

لتوضيح الطبيعة غير الكاملة لهذا الإصلاح، أعاد دات فونغ بناء التطبيق النموذجي باستخدام إصدار من Mongoose 8.9.4 (أحدث من 8.8.3). ومن خلال تضمين $where داخل جملة $or، يمكن للمهاجم تجاوز الفحص بنجاح وتحقيق تنفيذ التعليمات عن بُعد (RCE).

يوضح استغلال إثبات المفهوم كيف يمكن تشغيل CVE-2025-23061 في إصدارات Mongoose قبل الإصدار 8.9.5، مما يسمح للمهاجم بتنفيذ تعليمات برمجية عشوائية على الخادم:

التخفيف والتوجيه

للتخفيف من الثغرات الأمنية التي ناقشناها أعلاه، يرجى التأكد من تحديث نظامك إلى أحدث إصدار من Mongoose.

MetaDefender Core باستخدام محرك SBOM يمكنه اكتشاف هذه الثغرة الأمنية

OPSWAT MetaDefender Coreالمجهز بإمكانيات SBOMSoftware فاتورة الموادSoftware ) المتقدمة، يمكّن المؤسسات من اتباع نهج استباقي في معالجة المخاطر الأمنية. ومن خلال فحص تطبيقات البرمجيات وتوابعها، يحدد MetaDefender Core الثغرات الأمنية المعروفة، مثل CVE-2024-53900 و CVE-2025-23061، ضمن المكونات المدرجة. وهذا يمكّن فرق التطوير والأمان من تحديد أولويات جهود التصحيح، مما يخفف من المخاطر الأمنية المحتملة قبل أن تستغلها الجهات الخبيثة.

فيما يلي لقطة شاشة لصورتي CVE-2024-53900 و CVE-2025-23061، اللتين اكتشفهما MetaDefender Core باستخدام SBOM:

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

بالإضافة إلى ذلك، يمكن أيضًا اكتشاف CVEs عن طريق MetaDefender Software Supply Chainالتي تستفيد من MetaDefender Core مع SBOM لتحديد هذه الثغرات الأمنية.

الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900
الاكتشاف التقني لنمس CVE-2025-23061 و CVE-2024-53900

مرجع

https://www.geeksforgeeks.org/mongoose-tutorial/

https://mongoosejs.com/docs/populate.html

https://www.opswat.com/blog/protecting-apps-hackers-opswat-discovers-remote-execution-vulnerability-mongoose

ابق على اطلاع دائم OPSWAT!

اشترك اليوم لتتلقى آخر أخبار الشركة، والقصص، ومعلومات عن الفعاليات، والمزيد.