Le 22 mars 2010, la fondation Mozilla a publié un bulletin de sécurité indiquant la correction d'une nouvelle faille de sécurité [1]. Reportée par Evgeny Legerov, elle affecte la version 3.6 de Firefox et a été corrigée dans la version 3.6.2. D'après ce bulletin, le décodeur WOFF contiendrait un integer overflow dans la fonction de décompression des fontes résultant sur un heap overflow dans certains cas : l'utilisation d'une fonte malformée pourrait provoquer le crash du navigateur et entraîner l'exécution d'un code arbitraire. La suite de cet article détaille l'origine de la vulnérabilité et les techniques utilisées pour l'exploiter.
1. Analyse de la vulnérabilité
1.1 Le format WOFF
Depuis la version 3.6 de Firefox, le nouveau format de fonte compressée WOFF (Web Open Font Format) est supporté ; en conséquence, la surface d'attaque s'est trouvée agrandie et une vulnérabilité n'a donc pas tardé à être trouvée.
WOFF encapsule des fontes SFNT (TrueType, OpenType, ou Open Font Format) compressées par l'algorithme zlib. La structure des fontes WOFF est documentée [4] et similaire à celles des fontes SFNT : un répertoire de tables contient l'offset et la longueur des tables de fontes, suivi des tables elles-mêmes (Figure 1).