Des problèmes de contenu mixte surviennent lorsque des sites Web livrent leurs pages via HTTPS, mais permettent à certaines ressources d’être livrées en texte brut. L’attaquant de réseau actif ne peut rien faire à propos du trafic crypté, mais jouer avec le texte en clair peut entraîner des attaques allant du phishing dans le meilleur des cas au compromis complet du navigateur dans le pire des cas. Un seul script exposé suffit: l’attaquant peut détourner la connexion et y injecter des charges utiles d’attaque arbitraires.
Nous avons tendance à parler beaucoup d’autres aspects de SSL / TLS, mais le contenu mixte est sans doute le moyen le plus simple de gâcher complètement le cryptage de votre site Web.
Au tout début du Web, tout contenu mixte était autorisé; les navigateurs Web s’attendaient à ce que les opérateurs de sites réfléchissent aux conséquences du mélange de contenu. Cela, bien sûr, n’a pas abouti avec une grande sécurité. Les opérateurs du site ont fait tout ce dont ils avaient besoin pour faire leur travail et réduire les coûts. Ce n’est que ces dernières années que les fournisseurs de navigateurs ont commencé à faire attention et à restreindre le contenu mixte.
Aujourd’hui, presque tous les principaux navigateurs ont tendance à diviser le contenu mixte en deux catégories: passif pour les images, les vidéos et le son; et actif pour les ressources plus dangereuses, telles que les scripts. Ils ont tendance à autoriser le contenu mixte passif par défaut, mais rejettent le contenu actif. Il s’agit clairement d’un compromis entre la rupture du Web et une sécurité raisonnable.
Internet Explorer a été le leader de la gestion sécurisée du contenu mixte. Dès Internet Explorer 5 (selon cet article), ils avaient la détection et la prévention du contenu non sécurisé par défaut. Chrome a commencé à bloquer par défaut en 2011 et Firefox en 2013. Le navigateur Android et Safari par défaut, cependant, autorisent toujours tout le contenu mixte sans aucune restriction (et avec des avertissements presque inexistants).
Voici les résultats de mes tests récents sur le contenu non sécurisé autorisé par défaut:
Navigateur | Images | CSS | Scripts | XHR | WebSockets | Cadres |
---|---|---|---|---|---|---|
Navigateur Android 4.4.x | Oui | Oui | Oui | Oui | Oui | Oui |
Chrome 33 | Oui | Non | Non | Oui | Oui | Non |
Firefox 28 | Oui | Non | Non | Non | Non | Non |
Internet Explorer 11 | Oui | Non | Non | Non | Non | Non |
Safari 7 | Oui | Oui | Oui | Oui | Oui | Oui |
Ils sont la plupart du temps comme prévu, mais il y a une surprise avec Chrome, qui bloque le contenu de la page active, mais autorise toujours les connexions XMLHttpRequest et WebSocket en texte brut.
Il convient de mentionner que le tableau ne nous dit pas tout. Par exemple, les navigateurs ont tendance à ne pas contrôler ce que font leurs plugins. De plus, certains composants (par exemple, Flash ou Java) sont des environnements complets à part entière, et les navigateurs ne peuvent pas faire grand-chose pour renforcer la sécurité.
Test de gestion de contenu mixte dans SSL Labs
Pour faciliter l’évaluation de la gestion de ce problème par le navigateur, j’ai récemment étendu le test client SSL Labs à la gestion de contenu mixte. Lorsque vous visitez la page, votre navigateur utilisateur est testé et vous obtiendrez des résultats similaires à ceux-ci:
Prévalence du contenu mixte
Pour l’anecdote, le contenu mixte est très courant. Chez Qualys, nous avons étudié ce problème en 2011, ainsi que plusieurs autres problèmes au niveau de l’application qui entraînent une rupture totale du cryptage dans les applications Web. Nous avons analysé les pages d’accueil d’environ 250 000 sites Web sécurisés de la liste des 1 million d’Alexa, et avons déterminé que 22,41% d’entre eux utilisaient du contenu non sécurisé. Si les images sont exclues, le nombre tombe à 18,71%.
Une étude plus détaillée de 18 526 sites extraits d’Alexa top 100 000 a eu lieu en 2013: Un mélange dangereux: Analyse à grande échelle de sites Web à contenu mixte (Chen et al.). Pour chaque site, jusqu’à 200 pages sécurisées ont été analysées, pour un total de 481 656 pages. Leurs résultats indiquent que jusqu’à 43 % des sites Web présentent des problèmes de contenu mixte.
Atténuation
La meilleure défense contre les problèmes de contenu mixte est simplement de ne pas avoir ce type de problème dans votre code. Mais c’est facile à dire qu’à faire; il existe de nombreuses façons dont le contenu mixte peut s’infiltrer. Lorsque cela échoue, deux technologies peuvent être utiles:
- HTTP Strict Transport Security (HSTS) est un mécanisme qui impose la récupération sécurisée des ressources, même en cas d’erreurs de l’utilisateur (tentative d’accès à votre site Web sur le port 80) et d’erreurs d’implémentation (vos développeurs placent un lien non sécurisé dans une page sécurisée). HSTS est l’une des meilleures choses qui soit arrivée à TLS récemment, mais cela ne fonctionne que sur les noms d’hôte que vous contrôlez.
- La politique de sécurité du contenu (CSP) peut être utilisée pour bloquer la récupération de ressources non sécurisées à partir de sites Web tiers. Il dispose également de nombreuses autres fonctionnalités utiles pour résoudre d’autres problèmes de sécurité des applications, par exemple XSS.