web-dev-qa-db-fra.com

Pour un utilisateur final, HTML5 / JavaScript est-il plus sécurisé que Flash?

Je ne parle pas de sécurité côté serveur ni même nécessairement de vulnérabilités XSS, car ce sont des attaques sur des services vulnérables et n'utilisent aucune vulnérabilité préexistante côté client pour affecter un utilisateur final. Ils existeront tant que les développeurs Web continueront de rendre les applications Web vulnérables.

Je veux me concentrer sur la sécurité de l'utilisateur final dans ces deux scénarios différents:

  1. Flash installé et activé, mais JavaScript désactivé
  2. JavaScript activé, Flash non installé ou activé

Je suis intéressé par les réponses que je pourrais obtenir en posant un type de question qui nécessite la comparaison de deux technologies presque complètement différentes (en interne), mais concurrentes, en termes de sécurité des utilisateurs finaux.

45
Jonathan Gray

En théorie, si tous les serveurs et les connexions à ceux-ci étaient parfaitement sécurisés (impossible) et dignes de confiance (faux), aucun ne serait plus "sécurisé" que l'autre - principalement parce que le (s) développeur (s) du site Web contrôlent pleinement le contenu du site. Étant donné que Flash et le JS sont servis aux clients, le serveur devrait servir du contenu malveillant à l'utilisateur final pour que l'utilisateur final soit affecté.

Malheureusement, nous ne vivons pas dans un monde parfait et JS a tendance à être plus sûr dans le cas d'un compromis de serveur - il est beaucoup plus limité dans sa capacité à affecter le client. De nombreuses vulnérabilités Flash ont la capacité d'exécuter du code arbitraire, ce qui est beaucoup plus dommageable que les exploits de navigateur, qui nécessitent souvent plusieurs vulnérabilités pour sortir du bac à sable. Cela signifie que les exploits JS ne peuvent souvent manipuler le client que lorsque le client visualise cette page et ne peuvent généralement pas persister après sa fermeture, tandis que les exploits Flash peuvent infecter les clients avec des RAT ou d'autres logiciels malveillants, ce qui permet à l'attaquant d'avoir le contrôle sur le client même après la fermeture du navigateur.

Un autre avantage de l'utilisation de JS est que la source est visible par les clients. Une personne utilisant le site peut remarquer quelque chose de suspect dans la source et avertir les développeurs, ce qui permet de détecter plus facilement l'intrusion. Dans le cas de Flash, un attaquant malveillant peut injecter du code malveillant dans un swf existant et comme les utilisateurs ne peuvent pas afficher la source sans masquer le swf, le code malveillant peut rester non détecté plus longtemps.

Pour un utilisateur final, scénario 2:

JavaScript activé, Flash non installé ou activé

serait beaucoup plus sûr pour les raisons ci-dessus et compte tenu de l'historique des exploits d'Adobe Flash. Une recherche dans le NVD révèle un total de 610 vulnérabilités , dont 3 entre janvier 2014 et décembre 2015. La plupart des exploits liés à JS ont tendance à être spécifiques au navigateur, ce qui réduit le nombre de clients concernés, tandis que Flash est censé être multiplateforme, ce qui augmente le nombre de clients concernés (moins de nos jours, étant donné que de nombreuses personnes ont désactivé Flash).

TLDR: Gardez Flash désactivé et utilisez JS à la place.

54
WillS

En plus de l'excellente réponse de WillS, quelques différences supplémentaires affectent la sécurité:

  • Flash est un produit, alors que HTML5/Javascript est une spécification. Avec un produit (et surtout un produit à source fermée), vous dépendez toujours du fournisseur pour jouer à un jeu de whack-a-mole (ce qu'Adobe fait admirablement, mais à long terme, c'est une bataille perdue). Une spécification peut être réimplémentée si nécessaire (sauf s'il y a un défaut dans la spécification elle-même - mais même cela peut généralement être corrigé).
  • Les utilisateurs finaux peuvent ne pas disposer de la dernière version de Flash et ne pas être en mesure de mettre à niveau. Par exemple, les implémentations Linux et Android sont anciennes et non prises en charge.
  • Le flash est très ancien; il a été créé pour la première fois au siècle dernier. Tout logiciel qui vieillit est probablement une énorme boule de ruban adhésif en toile à ce stade. Encore une fois, cela est principalement dû au fait que Flash est un produit plutôt qu'une spécification. HTML et Javascript datent aussi de très loin, mais ne souffrent pas de ce problème, du moins pas dans la même mesure.

Mise à jour Deux problèmes supplémentaires avec Flash:

  • Flash peut établir ses propres connexions TCP. Si un chiffrement ou un hachage s'avère vulnérable, le navigateur peut le déprécier, mais Flash peut toujours l'utiliser. Adobe a tendance à être assez bon pour corriger de telles problèmes (au moins sur les plates-formes prises en charge), mais il double toujours le facteur whack-a-mole.
  • Flash a ses propres cookies, distincts des cookies du navigateur. Il s'agit principalement d'un problème de confidentialité plutôt que d'un problème de sécurité, mais de nombreuses personnes considèrent que ces deux problèmes sont liés.
31
Kevin Keane

Du point de vue de "l'exécution de xx à partir de votre navigateur peut faire planter votre machine ou compromettre votre sécurité", la réponse est claire: le flash est une ancienne technologie qui n'est plus bien prise en charge et avec une longue histoire d'exploits. Il est donc connu pour être potentiellement dangereux.

Quant au html5, au javascript et à d'autres technologies actuellement fiables, ils ne sont pas intrinsèquement plus sûrs - ils exécutent du code écrit par des tiers sur votre machine. Il y a une tentative de limiter ce qu'ils peuvent faire, mais l'efficacité dépend de la qualité des implémentations ainsi que de la conception sous-jacente. Les exploits sont inévitables.

0
ddyer