
Proof-of-concept-Exploit für CVE-2024-21338, eine Windows-AppLocker-Treiber-Schwachstelle (appid.sys) zur Privilegienerweiterung, die von der Lazarus-Gruppe als 0day verwendet wurde. Ermöglicht Kernel-Lese-/Schreibzugriff durch manipulierte IOCTL-Anfragen und PreviousMode-Manipulation.
Dies ist ein PoC für CVE-2024-21338, eine Privilege-Escalation-Schwachstelle im Windows-AppLocker-Treiber (appid.sys). Sie wurde von der Lazarus-Gruppe als 0-Day ausgenutzt, um eine lokale Rechteerweiterung unter Windows zu erreichen.
CVE-2024-21338 ist eine Privilege-Escalation-Schwachstelle, die am 13. Februar 2024 im Rahmen des Microsoft Patch Tuesday offengelegt wurde. Sie wurde von der Lazarus-Hackergruppe ausgenutzt, um Kernelzugriff zu erlangen und das FudModule-Rootkit einzusetzen.
Die Schwachstelle befindet sich im Steuercode 0x22A018 des appid.sys-Treibers. Angreifer können sie durch das Senden speziell gestalteter IOCTL-Anfragen auslösen, wodurch beliebige Rückrufe (Callbacks) aufgerufen werden können, um letztendlich Lese- und Schreibzugriff auf den Kernel zu erhalten.

Die Schwachstelle befindet sich in der Funktion AppHashComputeImageHashInternal des appid.sys-Treibers. AipDeviceIoControlDispatch prüft bei der Verarbeitung von 0x22A018-Anfragen PreviousMode nicht ordnungsgemäß, sodass Prozesse im Benutzermodus Rückruffunktionen im Kernelmodus auslösen können.
Erlangen von Local-Service-Berechtigungen: Für die Schwachstelle sind Local-Service-Berechtigungen erforderlich, um auf das Gerät \\Device\\AppID zuzugreifen. Das Tool sucht daher zunächst nach einem Local-Service-Prozess und führt eine Impersonation desselben durch.
Konstruieren der IOCTL-Anfrage: Das Tool konstruiert eine speziell gestaltete IOCTL-Anfrage, die einen kontrollierbaren Funktionszeiger und Parameter enthält.
Auslösen der Schwachstelle: Durch das Senden der IOCTL-Anfrage wird die Schwachstelle ausgelöst, eine Gadget-Funktion im Kernel aufgerufen und das Feld PreviousMode des aktuellen Threads von Benutzermodus in Kernelmodus geändert.
Erlangen von Lese- und Schreibzugriff auf den Kernel: Nach der Änderung von PreviousMode können Prozesse im Benutzermodus NtReadVirtualMemory und NtWriteVirtualMemory verwenden, um beliebigen Kernel-Speicher zu lesen und zu schreiben.
Kompilieren Sie das Projekt mit Visual Studio 2026. Dazu werden das Windows SDK und ein C++-Compiler benötigt.
Aktivieren Sie auf einem nicht gepatchten Windows-System (z. B. Windows 10 1709) den Application Identity-Dienst.
Führen Sie die kompilierte ausführbare Datei mit Administratorrechten aus.
Das Tool findet automatisch den Local-Service-Prozess und führt eine Impersonation desselben durch.
Das Tool lädt den appid.sys-Treiber und konstruiert eine IOCTL-Anfrage, um die Schwachstelle auszulösen.
Nach erfolgreichem Auslösen der Schwachstelle fordert das Tool zur Eingabe der zu ändernden Kernel-Adresse und des Werts auf, um den Kernel-Speicher zu modifizieren.
Dieses Projekt dient ausschließlich Bildungs- und Forschungszwecken und darf nicht für illegale Zwecke verwendet werden.
| Dateiname | Funktionsbeschreibung |
|---|
| main.cpp | Hauptfunktion; steuert den Ablauf des Exploits |
| CVE-2024-21338.h | Strukturen und Funktionsdeklarationen für den Exploit |
| CVE-2024-21338.cpp | Implementierungsfunktionen für die Voraussetzungen des Exploits |
| export_func.h | Deklarationen der exportierten Funktionen |
| gadget_search.cpp | Implementierung der Kernel-Gadget-Suche |
| Native.h | Definitionen der nativen Native-API |
| PE.h | Hilfsfunktionen für die Verarbeitung von PE-Dateien |