Une vulnérabilité de déréférencement de pointeur a été corrigée en fin d'année par le bulletin MS13-081. Elle affecte les systèmes Windows 7 SP1 et 2008 R2 et nous permet d'élever nos privilèges à travers le module noyau win32k. Cette vulnérabilité a été corrigée par le KB2876284, cet article décrit comment réaliser un exploit à travers les informations données par Endgame [ENDG] et l'excellent article de Matias d'Immunity [IMMU]. La vulnérabilité réside dans win32k et son exploitation repose sur la gestion, par ce module noyau, des objets dits « utilisateurs ». À ce titre, nous étudierons dans un premier temps les mécanismes impliqués, la raison de la vulnérabilité puis comment la déclencher. Finalement, nous décrirons les étapes nécessaires à une élévation de privilèges.
1. Contexte
win32k est un module de Windows prenant en charge la gestion de l'interface avec l'utilisateur, qui est apparue avec NT4.0. C'est avec elle qu'est arrivée la notion de « session » dans laquelle un processus n'est plus spécifique à un utilisateur, mais à une instance de celui-ci qui s'est identifié via une interface spécifique. Il est bon de rappeler également que l'interface graphique, telle que nous la manipulons quotidiennement, consiste en des objets graphiques (GDI) ainsi que des objets utilisateur (USER) permettant l'interaction avec celle-ci. Ces objets résident dans un espace mémoire du noyau nommé la session pool [POOL].
Comme décrit dans la Fig. 1, lorsqu'un thread crée une fenêtre via un appel à user32!CreateWindow[Fig1.1], win32k crée un objet win32k!tagWND[Fig1.2] représentant cette fenêtre. Cet objet est créé de manière générique depuis la session pool à l'aide de l'API win32k!HMAllocObject[Fig1.3].
Afin d'afficher notre...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première