
Exploit de preuve de concept pour CVE-2024-21338, une vulnérabilité d'élévation de privilèges dans le pilote Windows AppLocker (appid.sys) utilisée par le groupe Lazarus comme 0day. Permet une lecture/écriture noyau via des requêtes IOCTL forgées et la manipulation de PreviousMode.
Ceci est un POC pour CVE-2024-21338, une vulnérabilité d'élévation de privilèges dans le pilote Windows AppLocker (appid.sys), exploitée en tant que 0day par l'organisation Lazarus pour une élévation de privilèges locale sous Windows.
CVE-2024-21338 est une vulnérabilité d'élévation de privilèges divulguée lors du Patch Tuesday de Microsoft du 13 février 2024. Elle a été exploitée par le groupe de hackers Lazarus pour obtenir un accès au noyau afin de déployer le rootkit FudModule.
La vulnérabilité réside dans le code de contrôle 0x22A018 du pilote appid.sys. Un attaquant peut la déclencher en envoyant des requêtes IOCTL spécialement conçues, ce qui permet d'effectuer des appels de rappel arbitraires et d'obtenir finalement des accès en lecture/écriture au noyau.

La vulnérabilité se situe dans la fonction AppHashComputeImageHashInternal du pilote appid.sys. AipDeviceIoControlDispatch ne vérifie pas correctement PreviousMode lors du traitement des requêtes 0x22A018, ce qui permet à des processus en mode utilisateur de déclencher des fonctions de rappel en mode noyau.
Obtenir les privilèges Local Service : La vulnérabilité nécessite les privilèges Local Service pour accéder au périphérique \\Device\\AppID. L'outil localise donc d'abord le processus Local Service puis effectue une impersonation de ce processus.
Construire la requête IOCTL : L'outil construit une requête IOCTL spécialement conçue, contenant un pointeur de fonction contrôlable ainsi que des paramètres.
Déclencher la vulnérabilité : En envoyant la requête IOCTL, la vulnérabilité est déclenchée : la fonction gadget du noyau est appelée, ce qui modifie le champ PreviousMode du thread actuel, le faisant passer du mode utilisateur au mode noyau.
Obtenir des accès en lecture/écriture au noyau : Une fois PreviousMode modifié, les processus en mode utilisateur peuvent utiliser NtReadVirtualMemory et NtWriteVirtualMemory pour lire et écrire dans n'importe quelle mémoire du noyau.
Compilez le projet avec Visual Studio 2026. Le SDK Windows et un compilateur C++ sont requis.
Activez le service Application Identity sur un système Windows non corrigé (par exemple Windows 10 1709).
Exécutez le fichier exécutable compilé avec les privilèges administrateur.
L'outil localise automatiquement le processus Local Service et en effectue l'impersonation.
L'outil charge le pilote appid.sys et construit une requête IOCTL pour déclencher la vulnérabilité.
Une fois la vulnérabilité déclenchée avec succès, l'outil invite à saisir l'adresse et la valeur du noyau à modifier, permettant ainsi de modifier la mémoire du noyau.
Ce projet est uniquement destiné à des fins éducatives et de recherche. Il ne doit pas être utilisé à des fins illégales.
| Nom du fichier | Description |
|---|
| main.cpp | Fonction principale, responsable du flux de contrôle de l'exploitation |
| CVE-2024-21338.h | Déclarations des structures et fonctions liées à l'exploitation |
| CVE-2024-21338.cpp | Implémentation des conditions préalables à l'exploitation |
| export_func.h | Déclarations des fonctions exportées |
| gadget_search.cpp | Implémentation de la recherche de gadgets du noyau |
| Native.h | Définitions de la Native API |
| PE.h | Fonctions utilitaires pour le traitement des fichiers PE |