CVE-2020-0674
CVE-2020-0674 est une vulnérabilité de type use-after-free dans l'ancien moteur jscript. Elle peut être déclenchée dans Internet Explorer. L'exploit ici est écrit par maxpl0it mais la vulnérabilité elle-même a été découverte par Qihoo 360 alors qu'elle était utilisée dans la nature. Cet exploit ouvre simplement la calculatrice.
L'article détaillé sur l'exploit se trouve ici.
Aperçu de la vulnérabilité
- La vulnérabilité existe dans la fonction
sort du tableau (Array) lorsqu'une fonction de comparaison est utilisée.
- Les deux arguments fournis pour la fonction de comparaison ne sont pas suivis par le ramasse-miettes (Garbage Collector) et pointeront donc vers de la mémoire libérée après l'appel au GC.
Notes sur l'exploit
- L'exploit a été écrit spécifiquement pour Windows 7, mais pourrait probablement être porté sans trop de difficultés.
- Cet exploit a été écrit pour les instances x64 d'IE, il fonctionnera donc sur (et a été testé sur) les configurations de navigateur suivantes :
- IE 8 (version x64)
- IE 9 (version x64)
- IE 10 (avec le mode protégé amélioré activé ou TabProcGrowth activé)
- IE 11 (avec le mode protégé amélioré activé ou TabProcGrowth activé)
- Il est à noter que le mode protégé amélioré (Enhanced Protected Mode) sur Windows 7 active simplement la version x64 du processus du navigateur, il ne s'agit donc pas d'une évasion de la sandbox mais plutôt de l'absence de sandbox supplémentaire. Ironiquement, puisque cet exploit est pour x64, l'EPM lui permet en fait de fonctionner.
- L'exploit n'est pas conçu pour contourner entièrement EMET (seul un contournement de la détection de stack pivot a réellement été implémenté), cependant la version finale (5.52) ne semble pas déclencher EAF+ lors de l'exécution de l'exploit, contrairement à la version 5.5 (du moins, sur Windows 7 x64). Ainsi, IE 11 en mode protégé amélioré avec les paramètres EMET maximum activés permet l'exploit.
- L'exploit est fortement commenté, mais pour mieux comprendre son fonctionnement et ce qu'il fait à chaque étape, remplacez
var debug = false; par var debug = true; puis ouvrez la console développeur pour voir le journal ou laissez-la fermée et visualisez les popups alert à la place (ce qui peut être un peu agaçant).