Eh bien, lorsque vous ouvrez un site Web, le site Web peut demander au navigateur de faire toutes sortes de choses en son nom. Dans le cas le plus simple, il n'enverra que du texte et des images à afficher, mais il peut également envoyer de petits programmes que le navigateur exécutera (en JavaScript, que les navigateurs ont intégrés, ou en utilisant un plugin de navigateur tel que Java ou Flash) .
En principe, être infecté simplement en visitant un site Web devrait être impossible:
Bien que les navigateurs exécutent des programmes au nom des sites Web que vous visitez, ces programmes sont soigneusement limités afin qu'ils ne puissent faire que des choses "inoffensives". À partir de JavaScript, vous pouvez par exemple modifier la page à laquelle le JavaScript appartient (car les deux proviennent du même site Web, il ne peut y avoir aucun mal), mais JavaScript ne peut pas modifier une page d'un site Web différent (donc un site louche ne peut pas modifier votre affichage bancaire à domicile), et il peut ne pas accéder directement aux fichiers de votre ordinateur.
Des restrictions similaires existent pour la plupart des plugins (au moins pour Java et Flash). Ceci est communément appelé sandboxing , car le code est essentiellement dans une boîte qui lui est propre, isolé de l'ordinateur sur lequel il s'exécute. En particulier, il ne peut pas lire les fichiers sur votre disque dur, ni démarrer des programmes pour vous, comme le peuvent les programmes "ordinaires" exécutés sur votre ordinateur.
Maintenant, la chose est la suivante: alors qu'en principe vous êtes en sécurité, en pratique vous ne l'êtes peut-être pas. La raison en est que le système sandbox, comme tous les programmes, a des bugs. Parfois, ces bogues permettent à un programme de "casser" le bac à sable et d'inciter le navigateur ou les plugins à faire des choses qu'il ne devrait pas être autorisé à faire. Ces astuces peuvent être assez élaborées.
Exemples:
- Comme les programmes réguliers, l'implémentation du navigateur ou du plugin peut avoir des débordements de tampon, ce qui peut permettre à un site Web d'exécuter du code spécialement conçu en l'envoyant au navigateur en entrée.
- Il y avait une vulnérabilité dans les anciennes versions du plugin Java de Sun par rapport au bac à sable. Le sandbox a interdit (et interdit toujours) l'accès à toutes les fonctions Java qui pourraient permettre à un programme de causer des dommages, comme la lecture ou la suppression de fichiers locaux. Cependant, alors que le bac à sable bloquait correctement l'accès à ces fonctions à partir d'une applet Java, les navigateurs permettaient également un accès indirect à ces fonctions à partir de JavaScript (via une technique appelée "réflexion"). Cette «porte dérobée» n'avait pas été suffisamment prise en compte par les développeurs et avait permis de contourner les restrictions du sandbox, brisant le sandbox. Voir https://klikki.fi/adv/javaplugin.html pour plus de détails.
Malheureusement, il y a eu plusieurs vulnérabilités dans les bacs à sable de JavaScript, de Java et de Flash, pour n'en nommer que quelques-uns. C'est toujours une sorte de course entre les pirates malveillants qui détectent ces vulnérabilités pour les exploiter, et les bons pirates et développeurs qui les détectent et les corrigent. Habituellement, ils sont corrigés rapidement, mais il existe parfois une fenêtre de vulnérabilité.
BTW: Le sandbox est la raison pour laquelle certaines applets Java affichent un avertissement "Faites-vous confiance à cette applet" au lancement: Ces applets vous demandent de les laisser sortir de leur sandbox et de leur donner accès à votre ordinateur. Cela est parfois nécessaire, mais ne devrait être accordé que pour de bonnes raisons.
PS: La raison pour laquelle ActiveX (au moins les premières versions) était si horriblement précaire est qu'ActiveX n'a pas utilisé de bac à sable. Tout code ActiveX d'une page Web avait un accès complet à votre système. Pour être juste, cela a été (partiellement) corrigé dans les versions ultérieures.