Récemment, Firefox a eu un incident dans lequel la plupart des add-ons ont cessé de fonctionner. Cela était dû à une erreur de Mozilla : la fondation a laissé expirer l'un des certificats utilisés pour signer les add-ons, ce qui a eu pour effet de désactiver la grande majorité des add-ons. Maintenant que le problème est résolu pour la plupart des utilisateurs et que la plupart des add-ons ont été restaurés, Mozilla a souhaité expliquer en détail ce qui est arrivé et pourquoi ainsi que la façon dont la fondation a corrigé son erreur.
Modules complémentaires et signature de modules complémentaires
Firefox prend en charge un mécanisme d'extension appelé « add-ons » (modules complémentaires). Les modules complémentaires permettent aux utilisateurs d’ajouter à Firefox des fonctionnalités tierces qui étendent les fonctionnalités proposées par défaut. Il existe actuellement plus de 15 000 add-ons Firefox dotés de fonctionnalités allant du blocage d'annonces à la gestion de centaines d'onglets.
Firefox nécessite que tous les add-ons installés soient signés numériquement. Cette exigence vise à protéger les utilisateurs contre les add-ons malveillants en imposant un minimum de révision par le personnel de Mozilla. Avant d'introduire cette exigence en 2015, Firefox avait de sérieux problèmes avec les add-ons malveillants.
La façon dont fonctionne la signature complémentaire est que Firefox est configuré avec un « certificat racine » préinstallé. Cette racine est stockée hors ligne dans un module de sécurité matérielle (HSM - hardware security module). Il est utilisé pour signer un nouveau « certificat intermédiaire » qui est conservé en ligne et utilisé dans le cadre du processus de signature pendant quelques années. Lorsqu'un module complémentaire est présenté à la signature, Mozilla génère un nouveau « certificat d'entité finale » temporaire et le signe à l'aide du certificat intermédiaire. Le certificat d'entité finale est ensuite utilisé pour signer le module complémentaire lui-même. Visuellement, cela ressemble à ceci:
Notez que chaque certificat a un “sujet” (à qui le certificat appartient) et un “émetteur” (le signataire). Dans le cas de la racine, il s'agit de la même entité, mais pour d'autres certificats, l'émetteur d'un certificat est le sujet du certificat qui l'a signé.
Un point important ici est que chaque add-on est signé par son propre certificat d'entité finale, mais presque tous les add-ons partagent le même certificat intermédiaire. C'est ce certificat qui a rencontré un problème : chaque certificat a une période de validité pendant laquelle il est valide. Avant ou après cette fenêtre, le certificat ne sera pas accepté et un add-on signé avec ce certificat ne pourra pas être chargé dans Firefox. Malheureusement, le certificat intermédiaire que Firefox utilisait a expiré le 4 mai et, immédiatement, tous les add-ons signés avec ce certificat ne pouvaient plus être vérifiables, ce qui fait que Firefox n’était plus en mesure de les charger.
« Bien que tous les ajouts aient expiré vers minuit, l’impact de la panne n’a pas été immédiatement ressenti. La raison en est que Firefox ne vérifie pas en permanence la validité des add-ons. Au lieu de cela, tous les add-ons sont vérifiés environ toutes les 24 heures, l'heure de la vérification étant différente pour chaque utilisateur. Le résultat est que certaines personnes ont immédiatement rencontré des problèmes, d’autres seulement beaucoup plus tard. Chez Mozilla, nous avons pris conscience du problème le vendredi 3 mai vers 18 heures, heure du Pacifique. Nous avons immédiatement constitué une équipe chargée de tenter de résoudre le problème ».
Limiter les dommages
Une fois que Mozilla a compris ce à quoi elle étions confrontés, la fondation a pris plusieurs mesures pour éviter que la situation ne s'aggrave.
Tout d’abord, elle a la signature de nouveaux add-ons. C'était raisonnable à ce moment car les signatures étaient effectuées sur Firefox avec un certificat qui était expiré. Rétrospectivement, la fondation reconnaît qu’abandonner les signatures aurait pu fonctionner. Cependant, si elle avait opté pour cette solution, ce chemin allait alors interférer avec une atténuation qu’elle a envisagé plus bas mais n’a finalement pas utilisé).
Ensuite, Mozilla a immédiatement mis en place un correctif qui empêchait de valider à nouveau les signatures sur les add-ons. L’idée ici était d’éviter d’avoir des utilisateurs désemparés parmi ceux qui n’avaient pas encore vu une nouvelle validation de leur certificat. Mozilla l’a fait avant de disposer de tout autre correctif et l'a supprimé dès lors que les correctifs étaient disponibles.
Travailler en parallèle
« En théorie, résoudre un problème comme celui-ci semble simple : créer un nouveau certificat valide et publier à nouveau chaque module complémentaire avec ce certificat. Malheureusement, nous avons rapidement déterminé que cela ne fonctionnerait pas pour plusieurs raisons:
Il existe un très grand nombre d’add-ons (plus de 15 000) et le service de signature n’est pas optimisé pour la signature en bloc. Par conséquent, une nouvelle signature de chaque add-on prendrait plus de temps que nous le souhaitions.
Une fois les add-ons signés, les utilisateurs devraient en obtenir un nouveau. Certains modules complémentaires sont hébergés sur les serveurs de Mozilla et Firefox les mettrait à jour dans les 24 heures, mais les utilisateurs devraient mettre à jour manuellement les modules installés à partir d’autres sources, ce qui ne serait pas très pratique.
« Au lieu de cela, nous nous sommes attachés à essayer de développer un correctif que nous pourrions fournir à tous nos utilisateurs avec une...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.


