MS Windows Animated Cursor
(.ANI) Exploit

-=¤ Lionel d'Hauenens ¤=-


Ce petit travail présente un exemple d'exploitation (Proof-Of-Concept) d'une faille liée à certains fichiers de curseur animé (.ani) mal formatés.

Le problème vient de la routine LoadAniIcon de user32.dll. Lorsque l'icône principale est recherchée, certaines vérifications sur la bonne taille des différents "Chunks" ne sont pas faites correctement. Il est alors possible de générer un débordement de tampon dans la pile et ainsi de prendre le contrôle du flux du code.

Dans l'absolu, cette faille est un banal Stack Overflow. Mais sa puissance, du fait de son contexte d'exécution, en fait une faille majeure.

En effet, il suffit d'ouvrir avec Internet Explorer une page contenant un lien vers un curseur animé "retravaillé" pour que l'exploit puisse s'activer. Et ceci se réalise sans aucun avertissement ni autre manipulation de la part de l'utilisateur. De plus, cette faille touche tous les systèmes Windows de 2000 à ... Vista !!!

Au delà du côté dangereux de cette faille exploitable à distance, il existe aussi des problèmes au niveau local. Et c'est tout bonnement explorer.exe qui est directement impliqué. En effet, le simple fait de rendre visible le fichier .ani incriminé, dans une fenêtre ou le bureau, active l'exploit. Et encore une fois sans aucune autre manipulation. C'est en recherchant l'icône principale du fichier, afin de pouvoir l'afficher avec, qu'explorer.exe utilise LoadAniIcon.

Pour cet exemple, il a été choisi délibérément de travailler d'une manière traditionnelle avec un shellcode contenu dans le fichier .ani. Au moment du détournement du flux de code, plusieurs registres contiennent des valeurs permettant d'accéder au fichier ; celui-ci étant, à ce moment là, mappé en totalité en mémoire. Il devient alors facile d'exécuter le shellcode mais l'utilisation d’adresses dépendantes du système hôte est inévitable dans ces conditions. De ce fait, cet exemple ne propose pas d'exploit générique. Il permet seulement de tester la faille sous win2k SP4, winXP SP2 ou win2003 Server SP2.

Il est cependant possible d'exploiter cette faille de manière générique en utilisant la technique du "heap-spraying". Le shellcode se trouvera, à ce moment là, dans le script javascript afin d'être placé dans le heap et le fichier .ani servira à exécuter l'exploit d'une manière "indirecte". Quelques exemples ont déjà été publiés chez http://www.milw0rm.com/.

Informations complémentaires : Microsoft Security Advisory (935423)
Patch : Microsoft Security Bulletin MS07-017

note : Ce Proof Of Concept a été développé dans un but uniquement pédagogique et ne peut être utilisé que par des personnes autorisées.

That's all folks !

9 avril 2007

Lionel d'Hauenens
 

 
Labo - Association Loi 1901 - 04200 PEIPIN - France

Désengagement : Laboskopia se désengage de toute responsabilité quand à l’utilisation ou le mauvais usage qui peut être fait des informations contenues dans son site. Les renseignements contenus dans la publication des Bulletins peuvent changer et évoluer. L'utilisation de ces renseignements constitue l'acceptation des conditions. Toutes utilisations de ces informations se fait au risque de l'utilisateur.