
إثبات مفهوم لـ CVE-2026-54992، تجاوز عدد صحيح للقراءة عن بُعد في MSMQ
إثبات مفهوم لخطأ تجاوز السعة الصحيح للقراءة عن بُعد في خدمة Microsoft Message Queuing، المُتتبَّع بـ CVE-2026-54992.
يستخدم إثبات المفهوم جهازين افتراضيين يعملان بنظام Windows. يطلب مستخدم عادي على الهدف المُعرَّض للخطر من خدمة MSMQ المحلية القراءة من قائمة انتظار تستضيفها الأداة المساعدة (helper). تُرجع الأداة استجابة MS-MQRR غير صالحة، مما يؤدي إلى تعطّل mqsvc.exe على الهدف. يُظهر إثبات المفهوم رفض الخدمة (denial of service)؛ ولا يُظهر تنفيذ برمجيات عشوائية.
يتحقق mqqm.dll من كل قسم من أقسام الحزمة المُرجعة على حدة، لكنه في الإصدارات المتأثرة يجمع أطوال تخصيصها باستخدام قيمة 32-بت دون التحقق من تجاوز السعة الإجمالي. يوفّر هذا الإثبات أطوال أقسام 0x2000 و0xffffe010. مجموعهما الرياضي هو 0x100000010، وهو ما يلتف إلى 0x10. تخصص MSMQ مساحة تخزين الحزمة باستخدام الحجم المُلتفّ ثم تعالج أطوال الأقسام الأصلية، مما يؤدي إلى كتابة خارج النطاق.
قم ببناء الملفين الثنائيين x64 باستخدام MinGW-w64، ثم انسخ المجلد إلى كلا الجهازين الافتراضيين بنظام Windows:
make clean all
استخدم جهازين افتراضيين مؤقتين بنظام Windows على شبكة معزولة. تستخدم الأداة المساعدة وخدمة MSMQ الحقيقية منفذ TCP 2105، لذا يجب تشغيلهما على جهازين منفصلين.
على الهدف المُعرَّض للخطر، قم بالتشغيل من نافذة PowerShell بصلاحيات مرتفعة:
Set-ExecutionPolicy -Scope Process Bypass
.\setup-target.ps1
على الجهاز الافتراضي للأداة المساعدة، قم بالتشغيل من نافذة PowerShell بصلاحيات مرتفعة:
Set-ExecutionPolicy -Scope Process Bypass
.\start-emulator.ps1
ثم على الهدف، قم بالتشغيل من نافذة PowerShell عادية بدون صلاحيات مرتفعة، مع استبدال العنوان بعنوان IPv4 الخاص بالجهاز الافتراضي للأداة المساعدة:
.\invoke-crash.ps1 -Server 192.168.122.53 -IUnderstandThisWillCrashMSMQ
في البنية المتأثرة، ينتهي تشغيل mqsvc.exe وتتوقف MSMQ مع رمز خروج الخدمة 1067. لإعادة تعيين بيئة الاختبار، قم بتشغيل restore-helper.ps1 على الأداة المساعدة وأعد تشغيل MSMQ على الهدف.