
Analyse technique et PoC pour CVE-2024-6769, enchaînant le détournement de DLL avec l'empoisonnement du cache d'activation pour élever le niveau d'intégrité de moyen à élevé sur les systèmes Windows.
Cet article de blog porte sur deux bogues enchaînés : La première étape est un détournement de DLL provoqué par le remappage du lecteur ROOT, et la seconde est un empoisonnement du cache d'activation géré par le serveur CSRSS.
La première étape a été présentée en détail à l'Ekoparty 2023 dans la présentation intitulée "I'm High" par Nicolás Economou de BlueFrost Security. Il a expliqué comment exploiter la vulnérabilité qui, à l'époque, n'avait pas encore été corrigée par Microsoft. Cela permettait à un utilisateur de NIVEAU D'INTÉGRITÉ MOYEN de bénéficier de PRIVILÈGES ÉLEVÉS limités, mais sans l'accès complet nécessaire pour être un Administrateur à part entière.
La seconde étape n'a pas été présentée lors de cette conférence, bien que quelques pistes aient été suggérées pour commencer à la rechercher.
Pour commencer, nous examinerons la première étape afin de fournir un contexte introductif. À partir de là, nous plongerons dans mes recherches sur la seconde étape, en détaillant comment passer d'un niveau d'INTÉGRITÉ ÉLEVÉ limité à un Administrateur complet. Cela inclut une preuve de concept (PoC) complète et fonctionnelle pour les deux étapes sur toutes les versions de Windows, qui a été testée avec succès sur Windows 10, Windows 11, Windows Server 2022 et Windows Server 2019 avec toutes les mises à jour appliquées.

La seule condition pour cette étape est que le processus initial démarre à un NIVEAU D'INTÉGRITÉ MOYEN et que l'utilisateur appartienne au groupe Administrateur.
La première étape de l'exploitation peut être résumée dans les étapes suivantes :
Par exemple : remappage du disque de
"C:\" à "C:\users\public"
Cela remappera également le dossier "system32" de
"C:\windows\system32" à "C:\users\public\windows\system32"
L'un de ces programmes affectés est CTFMON, qui s'exécute à un NIVEAU D'INTÉGRITÉ ÉLEVÉ mais sans privilèges d'administrateur.
Normalement, il essaie de charger le module appelé MsCtfMonitor.dll depuis le vrai dossier system32, mais comme le lecteur ROOT a été remappé, il cherche MsCtfMonitor.dll dans notre system32 factice contrôlé, où nous pouvons créer et placer une DLL falsifiée avec le même nom.
À ce stade, en plaçant notre version de MsCtfMonitor.dll dans le faux dossier system32, sa fonction DoMsCtfMonitor est appelée et exécute notre code à un NIVEAU D'INTÉGRITÉ ÉLEVÉ.




En même temps, nous pouvons corroborer que le processus, bien qu'à un NIVEAU D'INTÉGRITÉ ÉLEVÉ, ne dispose pas de privilèges d'administrateur :


Dans sa présentation à l'Ekoparty, Nicolas a suggéré les étapes suivantes pour terminer l'exploitation :


Bien que cela semble simple, cela nécessite beaucoup de temps de rétro-ingénierie et de débogage.
En creusant un peu dans l'histoire de ce vecteur d'attaque, il est devenu clair que l'empoisonnement du cache des contextes d'activation a été utilisé dans certaines exploitations. Par conséquent, il est intéressant d'apprendre comment l'exploitation a été réalisée auparavant pour fournir un contexte et des informations supplémentaires. Des détails sur cette exploitation sont disponibles via l'article du Zero Day Initiative, Activation Context Cache Poisoning: Exploiting CSRSS for Privilege Escalation.
L'utilisation du cache d'activation se produit lorsqu'un programme va charger une bibliothèque nécessitant une version spécifique.
Par exemple, si une application va charger C:\Windows\System32\comctl32.dll, il n'y a aucune garantie que la comctl32.dll à cet emplacement soit la version dont l'application a besoin. C'est un cas d'utilisation basique du cache des contextes d'activation. Le programme peut envoyer une requête au serveur CSRSS pour traiter une nouvelle entrée de contexte d'activation à ajouter au cache, afin que ce programme puisse charger la version spécifique de la bibliothèque nécessaire.
À cet effet, on utilise le fichier dit manifeste, qui est au format XML. Il est généralement intégré en tant que ressource dans un fichier EXE ou DLL. Sinon, Windows recherchera un fichier manifeste dans le même dossier où se trouve l'exécutable du programme.
L'URL mentionnée ci-dessus contient quelques exemples de fichiers manifeste utilisés par d'anciennes exploitations, comme tromper le système pour charger la bibliothèque advapi32.dll depuis un répertoire contrôlé par l'attaquant grâce à une technique de TRAVERSÉE DE CHEMIN.

Bien sûr, certains vecteurs d'attaque utilisés ont été corrigés, et de nouvelles techniques ont été découvertes. De plus, dans le correctif d'octobre 2022 pour Windows 11 22H2, une nouvelle vérification a été ajoutée.