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:
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.
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.
En plus de l'excellente réponse de WillS, quelques différences supplémentaires affectent la sécurité:
Mise à jour Deux problèmes supplémentaires avec Flash:
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.