Comment fonctionne cette vérification
Scanaris réunit le HTML de ta page principale et télécharge jusqu'à quinze de ses scripts : tous ceux servis depuis ton propre domaine et, parmi les externes, ceux dont le chemin contient « jquery ». Dans ce texte, il cherche les bannières de version que les bibliothèques placent en tête de fichier. Trois cas ouvrent un constat, tous de sévérité moyenne. jQuery antérieur à 3.5.0 : vulnérabilités XSS connues (CVE-2020-11022 et CVE-2020-11023) dans sa façon de traiter le HTML. AngularJS, toute version 1.x : le framework est en fin de vie depuis janvier 2022 et ne reçoit plus de correctifs de sécurité. Bootstrap 3.x antérieur à 3.4.1 ou 4.x antérieur à 4.3.1 : XSS par les attributs data- des tooltips et popovers (CVE-2019-8331). Il ne signale que lorsqu'il trouve le numéro de version écrit ; si le fichier est minifié sans bannière, il ne devine pas.
Pourquoi c'est important
Une vulnérabilité XSS dans une bibliothèque chargée par tout ton site est une porte ouverte sur toutes les pages à la fois : un attaquant qui parvient à placer du texte là où la bibliothèque l'interprète comme du HTML (un commentaire, un nom de profil, un paramètre d'URL) exécute du JavaScript avec la session de celui qui le voit. Pour ces trois bibliothèques, les failles sont publiques depuis des années, avec des exemples d'exploitation publiés, et les outils automatiques les testent d'office. Le cas d'AngularJS est différent mais pire à long terme : ce n'est pas une faille précise, c'est que la prochaine qui apparaîtra ne sera jamais corrigée.
D'où ça vient
Parce que ça marche. Un jQuery 1.12 de 2016 fait toujours ce qu'il faisait et personne n'y touche de peur de casser quelque chose. Les thèmes et plugins WordPress sont le cas typique : le cœur de WordPress livre jQuery 3.7 depuis la version 5.6, mais un vieux thème peut charger sa propre copie. On le trouve aussi dans des templates HTML achetés, des panneaux d'administration hérités et des projets où l'IA a copié un exemple avec une URL de CDN vieille de plusieurs années.
Comment corriger
- jQuery : passe à la dernière 3.x (3.7 est la branche actuelle). Change l'URL du CDN ou le fichier local, et charge
jquery-migratependant quelques jours pour qu'il te signale en console les anciens appels à adapter. Teste les formulaires, les menus et tout plugin jQuery que tu utilises. - Bootstrap : si tu es en 3.x, passe en 3.4.1, qui est compatible ; en 4.x, passe en 4.6.2. Ce sont des versions de maintenance sans changement de design. Sauter en 5.x est une migration plus lourde parce qu'elle abandonne jQuery et renomme des classes ; planifie-la à part.
- AngularJS : il n'existe pas de version sûre vers laquelle monter. Les options sont migrer (vers Angular moderne, Vue ou React, par morceaux si l'appli est grande), acheter un support étendu commercial en attendant, ou isoler l'appli : sans données sensibles, derrière une authentification et avec une CSP stricte.
- WordPress : mets à jour le thème et les plugins ; si l'un d'eux continue de charger un vieux jQuery, remplace-le. Ne désactive pas le jQuery du cœur pour « alléger » : c'est la bonne version.
- En général : installe les bibliothèques avec npm au lieu de copier des URL de CDN, et active les alertes de dépendances de GitHub ou
npm auditpour être prévenu de la prochaine.
Vérifie que c'est corrigé
curl -s https://tondomaine.com | grep -oE 'src="[^"]*(jquery|bootstrap|angular)[^"]*"'
curl -s URL_DU_SCRIPT | head -c 400 | grep -oE '(jQuery|Bootstrap|AngularJS)[^0-9]{0,30}v?[0-9]+\.[0-9]+\.[0-9]+'
La première te dit quels fichiers ton site charge ; la seconde, avec l'URL de chacun, la version qu'ils déclarent. Attendu : jQuery 3.5.0 ou plus, Bootstrap 3.4.1, 4.3.1 ou plus, et aucun AngularJS.
Questions fréquentes
Seules ces trois bibliothèques sont détectées ?
Pour l'instant, oui : elles concentrent la majorité des vulnérabilités exploitées côté front sur les sites réels. Pour le reste de tes dépendances, npm audit ou les alertes GitHub couvrent ce qu'une analyse externe ne peut pas voir.
J'utilise jQuery 1.12 mais je n'insère jamais de HTML d'utilisateurs. Suis-je à l'abri ?
Tant que personne ne passe de texte non fiable par .html(), .append() ou similaires, la faille précise ne se déclenche pas. Mais c'est difficile à garantir sur tout le site et dans tous les plugins, et la mise à jour vers 3.x prend généralement un après-midi. En attendant, une CSP stricte limite les dégâts ; CSP faible la passe en revue.
Et si la bibliothèque vient d'un CDN ?
Alors, en plus de la mettre à jour, fige la version et ajoute integrity pour que personne ne puisse la remplacer en douce ; intégrité des sous-ressources l'explique.