Sécurité des animations FLASH

Date : 06 Février 2007

Le "plugin" FLASH de Adobe (développé initialement par la société Macromedia) est un composant qui permet aux navigateurs web (Internet Explorer, Firefox, etc…) de visualiser les animations FLASH présentes sur les sites web visités. Comme ces animations sont désormais très répandues, il est en fait quasiment indispensable d'installer ce "plugin".

Une animation FLASH n'est pas simplement un petit film (même si beaucoup d'animations que l'on voit, ressemblent à de simples petits dessins animés), mais une véritable application. Ainsi, en plus d'images vectorielles et de bitmaps, un fichier FLASH (fichier de suffixe ".swf") peut contenir des objets comme des menus, des champs de saisie, et surtout des scripts écrits dans un langage spécifique appelé "ActionScript". Il s'agit donc d'un programme à part entière, qui s'exécute sur le poste de l'internaute lorsqu'il visite le site où l'animation FLASH est présente.

Il s'agit donc d'une technologie "client side" (le code s'exécute sur le poste client, plutôt que sur le serveur web). Les problèmes potentiels de sécurité affectent donc uniquement le poste client, et ne mettent pas en danger le serveur web sur lesquels ces animations sont présentes.


Les animations FLASH peuvent-elles être dangereuses ?

Lorsque l'on s'intéresse à la sécurité des applications FLASH, on se rend compte rapidement qu'Adobe aborde largement dans sa documentation cet aspect, ce qui est un point très positif. Ainsi, la technologie FLASH dispose d'un "modèle de sécurité" qui fait par exemple que :

  • un composant FLASH ne peut dialoguer qu'avec le site d'où il a été téléchargé,
  • l'utilisateur peut paramétrer son lecteur en fonction de ses contraintes de sécurité.


Il y a cependant un certain nombre de vulnérabilités connues à propos des animations FLASH. Nous les présentons ci-dessous en nous intéressant successivement :

  • Aux vulnérabilités que l'on peut introduire involontairement dans une animation FLASH lors de son développement (faiblesses de conception ou de codage).
  • Puis au cas des animations FLASH malicieuses développées spécifiquement pour tenter d'attaquer le poste de l'internaute (ou de contourner ses mesures de protection).
 

Vulnérabilités lors de l'écriture d'animations FLASH

La première "vulnérabilité" d'une animation FLASH est qu'elle est facilement dé-compilable. Un internaute qui visite un site contenant des animations FLASH peut donc analyser le code de celles-ci. Il est par conséquence hors de question de placer des informations confidentielles à l'intérieur d'une application FLASH (mot de passe, algorithme ayant une valeur propre, etc…). De façon plus générale, aucun mécanisme de sécurité (par exemple une vérification de droit d'accès) ne peut-être implémenté à l'intérieur de l'application FLASH (ce mécanisme serait immédiatement visible à la décompilation, et donc contournable) et tous les contrôles doivent être fait niveaux du serveur web lui-même.

 

Ensuite, dans la mesure où une application FLASH peut utiliser des champs de saisie (ou des paramètres de lancement), il est indispensable de contrôler toutes les données reçues avant de les utiliser dans une application FLASH. Si cela n'est pas fait, il peut alors être possible, en introduisant des données malicieuses, de réaliser des attaques par injection, comme par exemple des "Cross-site scripting" (injection HTML) ou même de "SQL injection" (cas où l'application FLASH dialogue avec une base de données).

Par exemple la fonction "getURL()" du langage "ActionScript" permet à une animation FLASH d'ouvrir une page web (dont l'URL est spécifiée en paramètre). Dans certaines animations, le paramètre "URL" est une valeur reçue en paramètre par l'animation FLASH, ou  même calculée en fonction de données saisies par l'Internaute. Si aucun filtrage n'est fait sur ce paramètre avant de l'utiliser dans la fonction "getURL()", alors il est possible d'injecter des valeurs malicieuses, comme par exemple "http://autre-site.com" (détournement de l'internaute vers un autre site), ou même "javascript://" (injection de code JavaScript, et "Cross-site scripting").

Nota : Depuis la version 6.0 du lecteur FLASH, le paramètre "AllowScriptAccess" permet de lancer une animation FLASH dans laquelle il est interdit d'exécuter de code JavaScript, ce qui rend impossible l'attaque de type "javascript://" mentionnée ci-dessus. Cependant ce paramètre n'est pas positionné par défaut et il existe une vulnérabilité (corrigée dans le lecteur FLASH 9.0.16.0) permettant de contourner cette protection.

 

Vulnérabilités induites par les animations FLASH malicieuses

Tout d'abord, un certain nombre de vulnérabilités a été trouvé par le passé dans le plugin "FLASH". Par exemple, en 2006, le Cert-IST a émis 4 avis à propos de "FLASH" : CERT-IST/AV-2006.104 , CERT-IST/AV-2006.265 , CERT-IST/AV-2006.372 et  CERT-IST/AV-2006.480.

Certaines de ces vulnérabilités (par exemple la vulnérabilité CVE-2006-3311 décrites dans l'avis CERT-IST/AV-2006.265) peuvent permettre d'exécuter des commandes arbitraires sur le poste de l'internaute qui visualise une animation FLASH malicieuse avec une version vulnérable du plugin.

D'autres peuvent permettre de contourner les mécanismes de protections implémentés au niveau du plugin FLASH (c'est le cas par exemple de la vulnérabilité CVE-2006-4640 de l'avis CERT-IST/AV-2006.372).

Dans tous ces cas, la protection de l'internaute implique une mise à jour régulière du plugin "FLASH" utilisé par le navigateur web. Il s'agit de mises à jour supplémentaires par rapport aux mises à jour du navigateur lui-même, que l'internaute doit effectuer de lui-même (il n'existe pas de mécanisme de mise à jour automatique). Il n'est donc pas rare que des versions vulnérables d'un plugin ne soient mises à jour que très longtemps après que des failles aient été corrigées par Adobe. Pour atténuer cet effet (et aussi parce que le plugin "FLASH" est installé par défaut dans "Internet Explorer"), Microsoft a publié en 2006 deux mises à jour de sécurité Microsoft (MS06-020 et MS06-069) qui mettent à jour le plugin "FLASH" d'Adobe dans "Internet Explorer".

 

Ensuite, l'animation FLASH peut être un moyen de dissimuler du code malicieux JavaScript. Nous avons vu plus haut (cf. l'exemple parlant de la fonction " getURL()") qu'une animation FLASH peut faire exécuter du code JavaScript par le navigateur web sous jacent. Dans ce cas, le code JavaScript est donc dissimulé à l'intérieur de l'animation Flash et ne sera pas détecté si l'on analyse simplement le code HTML contenu dans la page web.

 

Enfin, depuis sa version 6, le lecteur FLASH peut stocker sur le disque de l'internaute des données persistantes (les "Local Shared Object") qui sont des objets comparables aux "cookies" du protocole HTTP. On parle souvent pour désigner ce mécanisme de "Flash cookies", et certaines sociétés proposent des animations Flash spécifiques permettant de tracer le comportement des internautes, même si celui-ci refuse les "cookies" HTTP traditionnels.


Conclusion

Au fur et à mesure du développement des nouvelles versions du plugin FLASH (et du langage de programmation "ActionScrip" sous jacent), Adobe a amélioré la robustesse de sa solution, en corrigeant les vulnérabilités connues, et en multipliant les fonctions de sécurité intégrées au produit. Aujourd'hui, il est donc possible de développer des applications FLASH sûres (tirant parti de toutes les fonctions de sécurité).

La plus grande difficulté reste la grande diversité des versions des plugins FLASH présents sur les postes des internautes. Outre le fait que les vieilles versions sont connues comme étant vulnérables à certaines attaques, leur présence en nombre significatif sur les PC des internautes freine l'utilisation des fonctions de sécurité proposées par les versions les plus récentes de FLASH. Ainsi, si la dernière version (depuis l'été 2006) est "Flash Player 9" (et "ActionScript 3.0"), il est encore très courant que les animations soient développées pour être compatibles avec "Flash Player 7" (et "ActionScript 2.0" qui datent de 2004), voire même "Flash Player 5" (et "ActionScript 1.0" qui datent de 2000).

 

Pour plus d'information

 

Précedent Précedent Suivant Suivant Imprimer Imprimer