CVE-2020-0674
CVE-2020-0674 est une vulnérabilité use-after-free dans le moteur JScript hérité. Elle peut être déclenchée dans Internet Explorer. L'exploit présenté 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 lance simplement calc.
L'article sur l'exploit est disponible ici.
Aperçu de la vulnérabilité
- La vulnérabilité réside dans la fonction
sort de Array lorsqu'une fonction de comparaison est utilisée.
- Les deux arguments fournis à la fonction de comparaison ne sont pas suivis par le Garbage Collector et pointeront donc vers de la mémoire libérée après l'appel du 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 des instances x64 d'IE et fonctionnera donc sur (et a été testé sur) les configurations de navigateur suivantes :
- IE 8 (x64 build)
- IE 9 (x64 build)
- IE 10 (soit avec Enhanced Protected Mode activé, soit avec TabProcGrowth activé)
- IE 11 (soit avec Enhanced Protected Mode activé, soit avec TabProcGrowth activé)
- Il convient de noter qu'Enhanced Protected Mode sous Windows 7 active simplement la version x64 du processus du navigateur ; ce n'est donc pas tant une évasion de sandbox qu'une absence de sandbox supplémentaire. Ironiquement, comme cet exploit cible x64, 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é) ; toutefois, la version finale (5.52) ne semble pas déclencher EAF+ lorsque l'exploit est exécuté, contrairement à la version 5.5 (du moins, sur Windows 7 x64). Ainsi, IE 11 en Enhanced Protected Mode avec les paramètres EMET réglés au maximum permet d'exécuter l'exploit.
- L'exploit est abondamment commenté, mais pour mieux comprendre comment il fonctionne 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 consultez les popups alert à la place (ce qui peut être un peu agaçant).