
إثبات مفهوم لاستغلال CVE-2025-51495، وهو تجاوز عدد صحيح في دالة mg_ws_cb الخاصة بـ Mongoose WebSocket يؤدي إلى وصول غير آمن إلى الذاكرة خارج الحدود واحتمال تنفيذ تعليمات برمجية عن بُعد.
أود الإبلاغ عن ثغرة أمنية تم تحديدها في أحدث إصدار من Mongoose (v7.17). تكمن المشكلة في وحدة WebSocket، وتحديدًا داخل الدالة mg_ws_cb المسؤولة عن معالجة إطارات WebSocket الواردة.
الدالة معرضة لتجاوز سعة عدد صحيح، مما قد يؤدي إلى وصول خارج النطاق إلى الذاكرة عند مدخلات مُصممة بعناية. قد يستغل المهاجم عن بُعد هذه الحالة لإحداث تلف في الذاكرة أو انهيار التطبيق.
ونظرًا لاختلاف البائعين في تنفيذ منطق أعمال WebSocket، فقد تؤدي هذه الثغرة إلى تنفيذ تعليمات برمجية عن بُعد.
التفاصيل:
تكمن الثغرة الجذرية في الدالة mg_ws_cb:
يمكن لحزمة WebSocket مُصممة بعناية يرسلها العميل أن تضبط ofs=0 عند هذه النقطة، مما سيؤدي إلى تجاوز سعة عدد صحيح عند حساب ofs-1، وينتج قيمة أكبر بكثير من طول recv.buf.
في دوال معالجة WebSocket اللاحقة، قد يتم استخدام هذا buf، وبما أن طوله أكبر من الطول الفعلي، فقد يؤدي ذلك إلى وصول خارج النطاق أو انهيار البرنامج.
تحفيز الثغرة :
لأغراض التوضيح، اخترت المثال الموجود في المشروع باسم "websocket-server". لم أُجرِ أي تعديلات على الكود سوى إضافة فحوصات ASAN أثناء الترجمة.
عند تشغيل البرنامج وإرسال حزمة websocket محددة، يحدث انهيار مباشر.
إثبات المفهوم:
اخترت أيضًا "websocket-client" الموجود في المشروع كعميل، وأجريت تعديلات على المعاملين فقط في دالة fn داخل main.c لإرسال الطلب.
تشغيل البرنامج المعدَّل سيتسبب في انهيار الخادم.