Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2022-37969 — Exploit de preuve de concept pour CVE-2022-37969, une élévation de privilèges locale du pilote Windows Common Log File System. Démontre le heap spray, le vol de jeton et l'écriture arbitraire dans le noyau pour obtenir les privilèges SYSTEM. | Kitploit
Outils/GitHubGitHub/fortra/cve-2022-37969
Escalade de PrivilègesCriminalistique MémoireAnalyse des VulnérabilitésExploitationExploitation de Binaires
GitHubfortra/cve-2022-37969

CVE-2022-37969

Exploit de preuve de concept pour CVE-2022-37969, une élévation de privilèges locale du pilote Windows Common Log File System. Démontre le heap spray, le vol de jeton et l'écriture arbitraire dans le noyau pour obtenir les privilèges SYSTEM.

Voir le dépôt
135389il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2022-37969 Windows Local Privilege Escalation PoC

auteurs : Ricardo Narvaja & Daniel Kazimirow (Solid)

À des fins de démonstration uniquement. L'exploit complet fonctionne sur les systèmes vulnérables Windows 11 21H2.

PoC fonctionnel basé sur les informations précédemment publiées par Zscaler

Consultez l'article Understanding the CVE-2022-37969 Windows Common Log File System Driver Local Privilege Escalation.

Utilisation

Understanding the CVE-2022-37969 Windows Common Log File System Driver Local Privilege Escalation.

Présentation de l'exploitation :

  • Création du fichier journal BLF initial
    • Création de plusieurs fichiers journaux BLF aléatoires
    • Façonnage du fichier journal initial
    • Exécution d'un Heap Spray contrôlé
    • Préparation des méthodes CreatePipe() / NtFsControlFile()
    • Une fois la mémoire préparée, déclenchement de la vulnérabilité
    • Lecture du jeton système
    • Validation du jeton
    • Remplacement du jeton de notre processus par celui du système
    • Exécution d'un processus en tant que système
    • Rétro-ingénierie du correctif : Analyse des structures
    • Corruption du pointeur "pContainer"
    • Réexamen du correctif
    • Corruption du SignatureOffset
    • Corruption d'autres valeurs
    • Contrôle des fonctions permettant de lire le jeton SYSTEM
    • Écriture dans notre propre processus pour réaliser l'élévation de privilèges locale
    • Code source du PoC

Le scénario utilisé ici était Windows 11 21H2 (OS Build 22000.918) clfs.sys v10.0.22000.918

Création du fichier journal BLF initial

La première étape consiste à créer un fichier nommé MyLog.blf dans le dossier public (%public%), en utilisant la fonction CreateLogFile() :

Création de plusieurs fichiers journaux BLF aléatoires

Ensuite, il crée plusieurs fichiers journaux avec des noms aléatoires en utilisant une boucle.

Et dans la boucle, il appelle notre fonction getBigPoolInfo() :

Elle appelle NtQuerySystemInformation(), avec 0x42 (66 décimal) comme premier argument, cela retournera dans v5 les informations sur les allocations faites dans le bigpool, dont la structure est de type SYSTEM_BIGPOOL_INFORMATION.

Nous devons appeler cette fonction deux fois. La première retournera une erreur, mais nous donnera la taille correcte du tampon pour appeler la seconde fois et obtenir les informations souhaitées.

Interfaz de usuario gráfica, Aplicación Descripción generada automáticamente

v5 recevra les informations de la structure SYSTEM_BIG_POOL_INFORMATION.

Le nombre d'allocations dans le bigpool est stocké dans le premier champ appelé Count, dans le second champ se trouve un tableau de structures SYSTEM_BIGPOOL_ENTRY.

Ensuite, nous recherchons dans toutes les structures la balise "Clfs" et la taille 0x7a00.

Il stocke dans un tableau appelé kernelAddrArray l'adresse virtuelle qui est le premier champ de chaque structure ayant la balise CLFS et la taille 0x7a00. Désormais, les pools qui remplissent ces deux conditions seront appelés : "pools corrects".

En plus de stocker chaque pool correct dans le tableau, il stocke le dernier pool correct trouvé dans le contenu de la variable a2, qui est utilisée comme argument de la fonction.

Interfaz de usuario gráfica, Texto, Aplicación Descripción generada automáticamente

Ainsi, a2 pointe toujours vers le dernier pool correct créé avec la balise CLFS et la taille 0x7a00.

La variable v26 stocke toujours le pool correct précédent trouvé car elle est égale à v24 (v26=v24), avant d'appeler getBigPoolinfo(), mais v24 est mise à jour en sortant de cet appel avec le dernier pool correct trouvé, et v26 reste avec le pool correct précédent trouvé.

Interfaz de usuario gráfica, Texto, Aplicación Descripción generada automáticamente

Ensuite, il soustrait les deux directions, et si le résultat est négatif, il inverse les opérandes pour qu'il soit toujours positif.

Interfaz de usuario gráfica, Texto, Aplicación Descripción generada automáticamente

Ainsi, dans v32 sera stockée la différence entre l'adresse virtuelle des deux derniers pools corrects trouvés.

Ensuite, il fait quelque chose de similaire. Dans ce cas, v23 est initialement nul, donc il fait v23 = v32 la première fois.

La prochaine fois dans la boucle, v23 a toujours la même valeur et n'est pas nul, donc il s'arrête et va ici.

V32 a la dernière différence et v23 la précédente, si elles sont égales, il sort et incrémente de un, mais remet le compteur à zéro.

L'idée est de trouver 6 comparaisons consécutives de balises CLFS et de taille 0x7a00 dont les différences sont égales, et cette différence sera 0x11000. Nous verrons lors de l'exécution que lorsqu'il trouve 6 (car il repart de zéro) consécutives avec des distances égales, il donnera cette valeur de différence entre elles.

Texto Descripción generada automáticamente

Là, nous voyons qu'il a trouvé 6 consécutives et a quitté la boucle de création de fichiers journaux.

Dans le dossier "public", nous pouvons voir les fichiers créés

Façonnage du fichier journal initial :

Télécharger l’outil