Analyse et exploitation des vulnérabilités 0day du système Microsoft Windows
Récemment, un correctif de sécurité publié par Microsoft a corrigé une vulnérabilité d'élévation de privilèges win32k qui est activement exploitée. Cette vulnérabilité affecte principalement les anciennes versions du système Windows, et il semble qu'elle ne puisse pas être déclenchée sur Windows 11. Cet article analysera comment les attaquants pourraient continuer à exploiter ce type de vulnérabilité dans l'environnement de sécurité actuel. L'analyse suivante est basée sur un environnement Windows Server 2016.
Contexte de la vulnérabilité
Les vulnérabilités 0day désignent des failles de sécurité non publiées et non corrigées, similaires au concept de transactions T+0 sur les marchés financiers. Une fois que ce type de vulnérabilité est exploité de manière malveillante, cela peut causer des dommages graves. La vulnérabilité 0day récemment découverte dans le système Windows permet à un attaquant d'obtenir un contrôle total du système, permettant ainsi des attaques telles que le vol d'informations, la destruction de systèmes et l'insertion de logiciels malveillants. Du point de vue de Web3, cela pourrait entraîner le vol de clés privées, le transfert d'actifs numériques, voire mettre en péril l'ensemble de l'écosystème Web3 basé sur une infrastructure Web2.
Analyse de correctif
L'analyse du code du patch a révélé qu'il corrigeait principalement un problème de gestion du comptage de références d'objets. En combinant cela avec les commentaires du code source win32k antérieur, on peut constater que le code d'origine ne verrouillait que l'objet de la fenêtre, sans verrouiller l'objet du menu dans la fenêtre, ce qui pourrait entraîner une référence incorrecte de l'objet du menu.
Preuve de concept d'exploitation de vulnérabilité ( PoC )
L'analyse révèle que la fonction xxxEnableMenuItem peut retourner l'état du MenuItem de la barre de menus principale ou d'un sous-menu. Nous avons construit une structure de menu spéciale à quatre niveaux, contenant les caractéristiques suivantes :
L'ID du menu de niveau le plus bas D doit être de type menu système.
Le menu de niveau supérieur A doit également être un menu système, mais il faut supprimer les éléments ayant le même ID que le menu D.
Supprimer la référence du menu C dans le menu B.
L'existence du menu B semble aider à la libération du menu C.
Lorsqu'une vulnérabilité est déclenchée, supprimez l'association des menus C et B lors du retour de xxxRedrawTitle au niveau utilisateur, et libérez le menu C. Cela conduit à une référence invalide à l'objet de menu C dans la fonction xxxEnableMenuItem par la suite.
Exploitation de la vulnérabilité ( Exp) mise en œuvre
Approche globale
Considérer deux directions d'utilisation possibles :
Exécuter le shellcode : se référer à des vulnérabilités antérieures comme CVE-2017-0263, mais dans les nouvelles versions de Windows, cela pourrait rencontrer de nombreux obstacles.
Utiliser les primitives de lecture et d'écriture pour modifier le token : ces dernières années, il existe encore des exp publics à consulter, il faut principalement résoudre le problème de la manière de contrôler la valeur de cbwndextra pour la première fois.
Nous adoptons la deuxième solution, qui consiste à diviser l'exp en deux étapes : contrôler la valeur cbwndextra et établir un langage de lecture et d'écriture stable.
Première écriture de données
Utiliser le nom de l'objet de la classe de fenêtre WNDClass pour occuper et libérer la mémoire de l'objet menu. Trouvez l'emplacement des données écrites dans la fonction xxxRedrawWindow, en contrôlant les données de mémoire de l'objet précédent pour satisfaire les vérifications de drapeau dans la fonction.
disposition de mémoire stable
Concevoir la disposition de la mémoire de trois objets HWND de 0x250 octets consécutifs, libérer l'objet intermédiaire et le remplacer par un objet HWNDClass. Les objets HWND avant et après sont utilisés pour vérifier et réaliser des primitives de lecture et d'écriture par le biais de fonctions. Localiser précisément l'agencement des objets par la fuite d'adresse de poignée du noyau.
Implémentation des primitives de lecture et d'écriture
Utilisez la fonction GetMenuBarInfo pour une lecture arbitraire, et la fonction SetClassLongPtr pour une écriture arbitraire. À part l'écriture de TOKEN, toutes les autres opérations d'écriture sont effectuées via l'objet de classe du premier objet de fenêtre.
Conclusion
Microsoft utilise Rust pour refondre le code win32k, ce qui pourrait résoudre complètement ce type de vulnérabilités à l'avenir.
L'exploitation de ce type de vulnérabilité repose principalement sur la fuite des adresses des poignées de tas de bureau, ce qui constitue toujours un risque de sécurité pour les systèmes anciens.
La découverte de cette vulnérabilité pourrait être attribuée à une détection de couverture de code plus complète.
La surveillance des dispositions de mémoire anormales et des lectures/écritures de données de fenêtre aide à détecter des vulnérabilités similaires.
Voir l'original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
11 J'aime
Récompense
11
6
Partager
Commentaire
0/400
TestnetNomad
· Il y a 14h
Qu'est-ce que tu racontes sur Rust ?
Voir l'originalRépondre0
StealthDeployer
· Il y a 14h
J'ai déjà commencé à utiliser Linux, c'est sage.
Voir l'originalRépondre0
CryptoMotivator
· Il y a 14h
Encore une fois, Microsoft a vraiment une longue tradition de bugs.
Voir l'originalRépondre0
LiquidatedDreams
· Il y a 14h
Utiliser Microsoft tout le temps, c'est un piège.
Voir l'originalRépondre0
MondayYoloFridayCry
· Il y a 14h
Je suis le plus mauvais investisseur détaillant de Web3
Analyse des vulnérabilités 0day du système Windows : de l'escalade de privilèges win32k aux risques de sécurité Web3
Analyse et exploitation des vulnérabilités 0day du système Microsoft Windows
Récemment, un correctif de sécurité publié par Microsoft a corrigé une vulnérabilité d'élévation de privilèges win32k qui est activement exploitée. Cette vulnérabilité affecte principalement les anciennes versions du système Windows, et il semble qu'elle ne puisse pas être déclenchée sur Windows 11. Cet article analysera comment les attaquants pourraient continuer à exploiter ce type de vulnérabilité dans l'environnement de sécurité actuel. L'analyse suivante est basée sur un environnement Windows Server 2016.
Contexte de la vulnérabilité
Les vulnérabilités 0day désignent des failles de sécurité non publiées et non corrigées, similaires au concept de transactions T+0 sur les marchés financiers. Une fois que ce type de vulnérabilité est exploité de manière malveillante, cela peut causer des dommages graves. La vulnérabilité 0day récemment découverte dans le système Windows permet à un attaquant d'obtenir un contrôle total du système, permettant ainsi des attaques telles que le vol d'informations, la destruction de systèmes et l'insertion de logiciels malveillants. Du point de vue de Web3, cela pourrait entraîner le vol de clés privées, le transfert d'actifs numériques, voire mettre en péril l'ensemble de l'écosystème Web3 basé sur une infrastructure Web2.
Analyse de correctif
L'analyse du code du patch a révélé qu'il corrigeait principalement un problème de gestion du comptage de références d'objets. En combinant cela avec les commentaires du code source win32k antérieur, on peut constater que le code d'origine ne verrouillait que l'objet de la fenêtre, sans verrouiller l'objet du menu dans la fenêtre, ce qui pourrait entraîner une référence incorrecte de l'objet du menu.
Preuve de concept d'exploitation de vulnérabilité ( PoC )
L'analyse révèle que la fonction xxxEnableMenuItem peut retourner l'état du MenuItem de la barre de menus principale ou d'un sous-menu. Nous avons construit une structure de menu spéciale à quatre niveaux, contenant les caractéristiques suivantes :
Lorsqu'une vulnérabilité est déclenchée, supprimez l'association des menus C et B lors du retour de xxxRedrawTitle au niveau utilisateur, et libérez le menu C. Cela conduit à une référence invalide à l'objet de menu C dans la fonction xxxEnableMenuItem par la suite.
Exploitation de la vulnérabilité ( Exp) mise en œuvre
Approche globale
Considérer deux directions d'utilisation possibles :
Exécuter le shellcode : se référer à des vulnérabilités antérieures comme CVE-2017-0263, mais dans les nouvelles versions de Windows, cela pourrait rencontrer de nombreux obstacles.
Utiliser les primitives de lecture et d'écriture pour modifier le token : ces dernières années, il existe encore des exp publics à consulter, il faut principalement résoudre le problème de la manière de contrôler la valeur de cbwndextra pour la première fois.
Nous adoptons la deuxième solution, qui consiste à diviser l'exp en deux étapes : contrôler la valeur cbwndextra et établir un langage de lecture et d'écriture stable.
Première écriture de données
Utiliser le nom de l'objet de la classe de fenêtre WNDClass pour occuper et libérer la mémoire de l'objet menu. Trouvez l'emplacement des données écrites dans la fonction xxxRedrawWindow, en contrôlant les données de mémoire de l'objet précédent pour satisfaire les vérifications de drapeau dans la fonction.
disposition de mémoire stable
Concevoir la disposition de la mémoire de trois objets HWND de 0x250 octets consécutifs, libérer l'objet intermédiaire et le remplacer par un objet HWNDClass. Les objets HWND avant et après sont utilisés pour vérifier et réaliser des primitives de lecture et d'écriture par le biais de fonctions. Localiser précisément l'agencement des objets par la fuite d'adresse de poignée du noyau.
Implémentation des primitives de lecture et d'écriture
Utilisez la fonction GetMenuBarInfo pour une lecture arbitraire, et la fonction SetClassLongPtr pour une écriture arbitraire. À part l'écriture de TOKEN, toutes les autres opérations d'écriture sont effectuées via l'objet de classe du premier objet de fenêtre.
Conclusion
Microsoft utilise Rust pour refondre le code win32k, ce qui pourrait résoudre complètement ce type de vulnérabilités à l'avenir.
L'exploitation de ce type de vulnérabilité repose principalement sur la fuite des adresses des poignées de tas de bureau, ce qui constitue toujours un risque de sécurité pour les systèmes anciens.
La découverte de cette vulnérabilité pourrait être attribuée à une détection de couverture de code plus complète.
La surveillance des dispositions de mémoire anormales et des lectures/écritures de données de fenêtre aide à détecter des vulnérabilités similaires.
Commentaire sur l'article :
Rust peut-il sauver Windows ? Ça m'a fait rire.