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.
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).