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
|