Le mécanisme Subresource Integrity (SRI) est une mesure de sécurité importante qui permet de vérifier l'intégrité des ressources externes chargées par une page web. Il est notamment utilisé pour réduire les risques liés aux fichiers JavaScript ou CSS chargés depuis un CDN, un domaine tiers ou une ressource externe.
Fonctionnement
SRI repose sur le principe d'une empreinte cryptographique. Lorsqu'une page web charge une ressource externe, le navigateur peut comparer le contenu réellement reçu avec une empreinte attendue. Si la ressource correspond à l'empreinte prévue, elle est considérée comme intacte. Si elle ne correspond pas, le navigateur peut bloquer son chargement.
Contrôle d'intégrité
Le contrôle effectué par SRI permet de détecter qu'une ressource externe a été modifiée, remplacée ou altérée. La moindre modification du fichier entraîne une empreinte différente, ce qui permet au navigateur d'identifier que le contenu reçu ne correspond plus au contenu attendu par le site.
Ressources externes
Les sites web modernes utilisent souvent des ressources externes, comme des bibliothèques JavaScript, des feuilles de style CSS, des frameworks ou des fichiers servis depuis des CDN. Si l'une de ces ressources est compromise, le site peut charger du code malveillant sans que son propre serveur soit directement attaqué. SRI permet de limiter ce risque en ajoutant une vérification d'intégrité côté navigateur.
Complément aux en-têtes de sécurité
Subresource Integrity n'est pas un en-tête HTTP de sécurité. Il ne fonctionne donc pas comme HSTS, Content-Security-Policy ou X-Frame-Options. Il s'agit d'un mécanisme complémentaire qui permet de vérifier que le contenu d'une ressource externe n'a pas été altéré. Il peut être utilisé en complément d'une politique CSP afin de renforcer la sécurité du chargement des ressources.
Limites
SRI ne garantit pas qu'une ressource est sûre. Il garantit uniquement qu'elle correspond à une version attendue. Une ressource peut donc être intègre tout en contenant une vulnérabilité. SRI ne remplace pas les bonnes pratiques de développement, la mise à jour des dépendances, la configuration d'une Content-Security-Policy ou l'audit des bibliothèques utilisées.
SRI est un mécanisme de sécurité important qui aide à renforcer la confiance accordée aux ressources externes chargées par une page web. Son utilisation permet de réduire les risques liés à la compromission d'un CDN, à l'altération d'une bibliothèque externe ou à certaines attaques de supply chain côté navigateur.
Quelles sont les risques ?
L'absence de Subresource Integrity (SRI) peut exposer votre site web à plusieurs risques lorsqu'il charge des ressources externes depuis un CDN, un domaine tiers ou une source qui n'est pas directement maîtrisée.
- Compromission d'un CDN : Si un CDN utilisé par votre site est compromis, un attaquant peut remplacer une ressource légitime par une version malveillante. Sans SRI, le navigateur peut charger cette ressource comme si elle était normale, ce qui peut exposer les visiteurs à du code non prévu.
- Injection de code JavaScript malveillant : Une ressource JavaScript externe altérée peut permettre l'exécution de code malveillant dans le navigateur des utilisateurs. Cela peut conduire à du vol de session, de l'exfiltration de données, du phishing intégré à la page ou à une modification du comportement normal du site.
- Attaque de supply chain : Les sites modernes reposent souvent sur des dépendances externes. Si l'une de ces dépendances est modifiée de manière malveillante, le site peut devenir un vecteur d'attaque même si son propre code n'a pas été directement compromis.
- Modification silencieuse d'une ressource : Sans contrôle d'intégrité, une ressource externe peut être modifiée sans que le propriétaire du site ne s'en rende compte. Cette modification peut être volontaire, accidentelle ou malveillante, et peut avoir un impact sur la sécurité, l'affichage ou le fonctionnement du site.
- Dépendance excessive à des ressources tierces : Lorsqu'un site charge des scripts ou des styles depuis des domaines externes sans vérification d'intégrité, il accorde une confiance importante à ces sources. En cas de compromission ou de changement non maîtrisé, les visiteurs peuvent être exposés à des contenus qui ne correspondent plus à ce qui était attendu.
L'utilisation de Subresource Integrity (SRI) permet de renforcer la sécurité des ressources externes chargées par votre site web. Même s'il ne s'agit pas d'un en-tête HTTP de sécurité, SRI complète efficacement les Security Headers en aidant le navigateur à bloquer les fichiers externes dont le contenu ne correspond plus à la version attendue.