
استغلال تنفيذ التعليمات البرمجية عن بُعد في مكتبة RPC
CVE-2022-26809 - ثغرة في مكوّن أساسي في ويندوز (RPC) حصلت على درجة 9.8 على مقياس CVSS وليس من دون سبب، إذ أن الهجوم لا يتطلب مصادقة ويمكن تنفيذه عن بُعد عبر الشبكة، ويمكن أن يؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE) بصلاحيات خدمة RPC، والتي تعتمد على العملية التي تستضيف بيئة تشغيل RPC. تلك الثغرة الحرجة، مع قليل من الحظ، تسمح بالوصول إلى مضيف ويندوز غير محدّث يشغّل خدمة SMB. يمكن استغلال الثغرة من خارج الشبكة لاختراقها، وكذلك بين الأجهزة داخل الشبكة.
ذكرت CVE أن الثغرات تكمن في بيئة تشغيل RPC في ويندوز، وهي مطبَّقة في مكتبة اسمها rpcrt4.dll. تُحمَّل هذه المكتبة البرمجية في كلٍّ من عمليات العميل والخادم التي تستخدم بروتوكول RPC للتواصل. قارنَّا بين الإصدارين 10.0.22000.434 (مارس) و10.0.22000.613 (المصحّح) واستخرجنا قائمة بالتغييرات.
الدالتان OSF_SCALL::ProcessResponse وOSF_CCALL::ProcessReceivedPDU متشابهتان في طبيعتهما؛ فكلتاهما تعالجان حزم RPC، لكن إحداهما تعمل على جانب الخادم والأخرى على جانب العميل (SCALL وCCALL). من خلال مقارنة OSF_SCALL::ProcessReceivedPDU لاحظنا وجود كتلتين برمجيتين أُضيفتا إلى الإصدار الجديد.


بالنظر إلى الكود المُصحَّح، رأينا أنه بعد QUEUE::PutOnQueue تم استدعاء دالة جديدة. وبفحص الدالة الجديدة والغوص في كودها، اكتشفنا أنها تتحقق من تجاوزات الأعداد الصحيحة. بعبارة أخرى، أُضيفت الدالة الجديدة في التصحيح للتحقق من بقاء متغير عددي ضمن نطاق القيم المتوقع.

وبالتعمق أكثر في الكود الهش في OSF_SCALL:GetCoalescedBuffer، لاحظنا أن خطأ تجاوز العدد الصحيح قد يؤدي إلى تجاوز سعة المخزن المؤقت في الكومة (heap buffer overflow)، حيث تُنسخ البيانات إلى مخزن مؤقت أصغر من اللازم لاستيعابها. وهذا بدوره يسمح بكتابة البيانات خارج حدود المخزن المؤقت في الكومة. وعند استغلالها، تقودنا هذه الأولية الاستغلالية إلى تنفيذ تعليمات برمجية عن بُعد!
تمت إضافة استدعاء مماثل للتحقق من تجاوز الأعداد الصحيحة في دوال أخرى أيضًا:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
توجد ثغرة تجاوز العدد الصحيح والدالة التي تمنعها في مساري التنفيذ على جانب العميل وجانب الخادم معًا.
لا يزال قيد التطوير، لا يوجد ETA بعد.