D-OPEN

Mozilla a révoqué sa clé de signature avec le code 2 — les 5 leçons que j’en tire pour nos dépôts privés

Serveur et cryptographie — illustration de la signature de paquets logiciels
Panos Petropoulos

Panos Petropoulos

Ingénieur plateforme · 16 août 2026 · 11 min de lecture

💡 TL;DR — L’essentiel en 30 secondes

  • • Une copie non chiffrée d’une sous-clé GPG de signature s’est retrouvée dans un dépôt GitHub privé de Mozilla.
  • • Certificat de révocation généré le 6 août 2026 à 7 h 14 (heure de l’Est), annonce publique le 10 août sur le blog sécurité de Mozilla.
  • • Motif retenu : code 2 de la RFC 4880, « clé compromise » — ce qui rend suspecte toute signature jamais produite par cette clé.
  • • Périmètre : archives Linux, paquets RPM et fichiers de sommes de contrôle de Firefox et Thunderbird. Mozilla indique n’avoir aucune preuve d’un accès non autorisé.
  • • La leçon : un dépôt privé est un contrôle d’accès, pas un coffre-fort.

Il y a deux façons de lire cet incident. La première, rassurante : personne n’a volé la clé, l’accès au dépôt était restreint à un petit groupe interne, et toutes les personnes concernées étaient de toute façon habilitées à manipuler ce secret par d’autres canaux. La seconde, plus utile : une organisation qui fait de la sécurité son métier depuis vingt-cinq ans a quand même laissé une clé privée non chiffrée entrer dans un dépôt Git, et ne s’en est aperçue qu’après coup.

C’est la seconde lecture qui m’intéresse, parce qu’elle s’applique directement aux équipes que nous accompagnons. Voici ce qui s’est passé, et les cinq enseignements que j’en tire pour des dépôts bien moins surveillés que ceux de Mozilla.

Le déroulé des faits

Le 10 août 2026, Mozilla publie sur son blog sécurité une note intitulée « Updated GPG key for signing Firefox and Thunderbird Releases ». Derrière ce titre administratif se cache une opération d’urgence : le remplacement de la clé qui signe les archives Linux, les paquets RPM et les fichiers de sommes de contrôle des deux logiciels.

L’élément le plus parlant du dossier est le certificat de révocation lui-même. Il a été généré le 6 août 2026 à 7 h 14 heure de l’Est, soit quatre jours avant l’annonce publique, avec la mention « nous ne faisons plus confiance à cette clé ». Ce décalage de quatre jours entre la décision technique et la communication n’a rien de scandaleux : il correspond au temps nécessaire pour publier la nouvelle clé, mettre à jour les canaux de distribution et préparer la documentation. Mais il rappelle que la fenêtre pendant laquelle une organisation sait, alors que vous ne savez pas encore, est une réalité structurelle de la sécurité logicielle.

Avant le 6 aoûtSous-clé non chiffréeversée en dépôt privé6 août, 7 h 14 ETCertificat de révocation généréMotif RFC 4880 code 210 aoûtAnnonce publiqueet nouvelle clé publiéeQuatre jours séparent la décision technique de l’information des utilisateurs

Pourquoi le code 2 n’est pas un détail

La norme RFC 4880, qui régit OpenPGP, permet d’indiquer un motif quand on révoque une clé. Le code 1 signifie « clé remplacée » : c’est une rotation ordinaire, les signatures antérieures restent valides. Le code 2 signifie « clé compromise » : le matériel cryptographique est considéré comme potentiellement entre des mains tierces, et par conséquent toute signature produite par cette clé devient suspecte, y compris celles apposées des années auparavant.

Mozilla a retenu le code 2 alors même que son enquête ne montrait aucune preuve d’accès non autorisé. C’est un choix conservateur et, à mon sens, le bon : en sécurité, l’absence de preuve d’exfiltration n’est pas une preuve d’absence d’exfiltration. La conséquence pratique est en revanche brutale — la vérification des anciens téléchargements signés avec cette clé échoue désormais, ce qui déclenche mécaniquement des alertes chez tous ceux qui automatisent ce contrôle.

🎯 Notre avis d’expert #1 — Le vrai coût est chez ceux qui vérifient

Il y a une ironie inconfortable dans cet incident. Les équipes les moins affectées sont celles qui ne vérifiaient jamais les signatures : pour elles, rien ne change. Les équipes qui font correctement leur travail — vérification systématique des sommes et des signatures dans leurs chaînes d’intégration — sont exactement celles qui ont vu leurs constructions échouer. Ce déséquilibre est un problème de fond : il pénalise la rigueur à court terme. Raison de plus pour documenter ce type d’événement en interne, afin qu’une bonne pratique ne soit pas abandonnée après une matinée de dépannage.

Leçon 1 — Un dépôt privé n’est pas un coffre-fort

C’est l’enseignement central. Un dépôt privé fournit un contrôle d’accès ; il ne fournit ni chiffrement propre au secret, ni rotation automatique, ni journal d’accès au niveau du secret, ni expiration. Surtout, l’historique Git conserve la valeur indéfiniment : supprimer le fichier dans un commit ultérieur ne supprime rien du tout. Toute personne ayant cloné le dépôt entre-temps détient une copie permanente.

La règle que nous appliquons est simple : un secret ne doit jamais exister en clair ailleurs que dans un gestionnaire de secrets ou une variable d’environnement injectée à l’exécution. Si un fichier chiffré doit être versionné, il l’est avec un outil de chiffrement dédié, et la clé de déchiffrement n’est jamais dans le même dépôt.

Leçon 2 — Séparer les sous-clés de la clé maîtresse

Mozilla n’a pas perdu sa clé maîtresse : c’est une sous-clé de signature qui a fuité. C’est précisément la raison pour laquelle l’incident s’est réglé par un remplacement plutôt que par une reconstruction complète de la chaîne de confiance. La clé maîtresse conserve l’identité et permet de certifier la nouvelle sous-clé.

Si votre organisation signe des artefacts et utilise une clé unique qui fait tout, vous n’avez pas cette porte de sortie. Le schéma à adopter : une clé maîtresse conservée hors ligne, idéalement sur un support matériel, et des sous-clés opérationnelles à durée de vie courte pour la signature quotidienne.

Vous ne savez pas ce qui dort dans l’historique de vos dépôts ?

On analyse vos dépôts, on liste les secrets encore valides trouvés dans l’historique, et on vous rend un plan de rotation priorisé. Discutons-en.

Discutons-en

Leçon 3 — La détection automatique doit précéder l’humain

Aucune relecture de code ne rattrape durablement ce genre d’erreur. Un fichier de clé arrive souvent dans un commit volumineux, parfois généré par un script, parfois ajouté par un git add . distrait un vendredi soir. La seule défense fiable est mécanique : un contrôle en amont du commit sur le poste du développeur, doublé d’une analyse côté serveur qui bloque la fusion.

Le doublon est volontaire. Le contrôle local peut être contourné, désactivé ou simplement absent d’un nouveau poste ; le contrôle serveur, lui, est incontournable. À l’inverse, le contrôle serveur seul laisse le secret entrer dans une branche distante avant de sonner l’alerte — ce qui est déjà trop tard.

🎯 Notre avis d’expert #2 — Mesurez votre délai de rotation, pas votre taux de fuite

La plupart des équipes se fixent comme objectif de ne jamais laisser fuiter un secret. C’est un objectif non mesurable et démoralisant, parce qu’il sera manqué un jour. L’indicateur que nous recommandons est le délai entre la détection et la rotation effective. Il est mesurable, il s’améliore par l’outillage plutôt que par la discipline, et il prépare l’organisation au seul scénario qui compte vraiment : celui où la fuite a déjà eu lieu. Mozilla a révoqué en interne avant de communiquer, ce qui suggère un processus déjà répété.

Leçon 4 — Écrire la procédure de révocation avant d’en avoir besoin

Révoquer une clé de signature sous pression est une très mauvaise idée. Il faut choisir un motif de révocation — et l’on vient de voir que ce choix a des conséquences rétroactives —, publier la nouvelle clé sur plusieurs canaux, mettre à jour les dépôts de paquets, prévenir les redistributeurs, et rédiger une communication compréhensible.

Cette procédure doit exister sous forme écrite, avec les commandes exactes, les emplacements de publication et la liste des personnes à prévenir. Le test de validité est simple : la procédure doit pouvoir être exécutée par quelqu’un qui n’a pas participé à sa rédaction, un dimanche, sans accès à la personne qui détient l’historique du projet.

1 · Faire tournerLe secret devient sans valeur2 · NettoyerRéécrire l’historique3 · DétecterEmpêcher la récidiveL’erreur classique : commencer par l’étape 2Nettoyer l’historique pendant que le secret reste valide ne protège de rienUn secret cloné ou mis en cache par un outil d’intégration reste exploitable

Leçon 5 — Communiquer le périmètre exact, pas la rassurance

La note de Mozilla fait une chose que beaucoup d’avis de sécurité ratent : elle délimite précisément ce qui est concerné — archives Linux, paquets RPM, fichiers de sommes de contrôle — et ce qui ne l’est pas. Cette précision permet à chaque lecteur de déterminer en trente secondes s’il doit agir. Un utilisateur Windows ou macOS installant par les canaux habituels n’est pas concerné ; un mainteneur de paquets Linux l’est immédiatement.

À l’inverse, une communication qui insiste sur « aucune donnée utilisateur n’a été affectée » sans dire ce qui a été affecté force chaque lecteur à mener sa propre enquête. Quand vous rédigerez votre propre avis — et ce jour viendra —, écrivez d’abord la liste de ce qui est touché, ensuite seulement les éléments rassurants.

🎯 Notre avis d’expert #3 — Ce que nous changeons dès cette semaine

Trois actions, toutes réalisables en quelques jours. D’abord, passer l’historique complet des dépôts internes au crible d’un détecteur de secrets — pas seulement les derniers commits, l’historique entier, car c’est là que se cachent les vieilles clés. Ensuite, vérifier que les clés de signature utilisées en production sont des sous-clés et non des clés maîtresses. Enfin, écrire la procédure de révocation et la faire relire par quelqu’un qui n’a pas participé au projet. Ce sont des tâches ingrates, sans démonstration visible — et ce sont celles qui font la différence le jour de l’incident.

Ce que ça change pour une équipe française de taille modeste

Beaucoup d’équipes se disent que ces sujets concernent les éditeurs distribuant des binaires à des millions d’utilisateurs. C’est une erreur de perspective : dès que vous publiez une image de conteneur, un paquet interne ou un artefact consommé par un client, vous êtes dans une chaîne de distribution logicielle, avec les mêmes propriétés et souvent bien moins d’outillage.

La différence est que Mozilla dispose d’un processus rodé et d’un blog sécurité pour communiquer. Une équipe de quinze personnes qui découvre une clé de signature dans son historique un vendredi soir n’a ni l’un ni l’autre. C’est exactement pour cette raison que les leçons 4 et 5 comptent davantage pour elle que pour Mozilla. Pour les projets où cette chaîne est critique dès le premier jour — c’est typiquement le cas des applications financières, comme nous le détaillons dans notre guide créer une application fintech —, la gestion des clés doit être posée avant la première mise en production, pas après.

Sur le volet purement défensif et réglementaire, l’équipe de WebGuard Agency traite régulièrement la question des obligations de notification, qui se déclenchent plus vite qu’on ne le croit. Et pour les organisations qui intègrent des composants d’IA dans leurs chaînes de construction, les confrères de Plug-Tech documentent les risques propres aux agents disposant d’un accès en écriture aux dépôts — un sujet directement connexe à celui-ci.

Questions fréquentes

Que s’est-il passé exactement chez Mozilla ?

Une copie non chiffrée d’une sous-clé GPG servant à signer les archives Linux, les paquets RPM et les fichiers de sommes de contrôle de Firefox et Thunderbird a été versée par inadvertance dans un dépôt GitHub privé. Le certificat de révocation a été généré le 6 août 2026 à 7 h 14 heure de l’Est, et le remplacement annoncé publiquement le 10 août sur le blog sécurité de Mozilla.

Pourquoi le code de révocation 2 change-t-il tout ?

Le code 1 de la RFC 4880 signifie « clé remplacée » et laisse valides les signatures passées. Le code 2 signifie « clé compromise » et rend suspecte toute signature jamais produite par la clé, y compris rétroactivement. Mozilla a choisi le code 2 — le choix prudent, mais celui qui fait échouer la vérification des anciens téléchargements.

Un dépôt privé n’est-il pas suffisamment sûr pour un secret ?

Non. Un dépôt privé est un contrôle d’accès, pas un coffre-fort : ni chiffrement propre au secret, ni rotation, ni journal au niveau du secret, et un historique qui conserve la valeur même après suppression du fichier. Mozilla précise que l’accès était limité à un petit groupe déjà habilité — et a tout de même révoqué, ce qui est la bonne réaction.

Que faire si un secret est déjà dans notre historique ?

Faites-le tourner en premier, avant toute autre action. Réécrire l’historique est utile mais secondaire : tant que le secret reste valide, il constitue un risque, et il a pu être cloné ou mis en cache par un outil d’intégration continue. L’ordre correct est : révoquer et remplacer, puis nettoyer, puis outiller la détection.

Un audit de vos secrets avant que la question ne se pose en urgence

Analyse d’historique, inventaire des clés de signature, procédure de révocation rédigée et testée avec votre équipe. Un livrable, deux semaines.

Discutons-en

Sources : note « Updated GPG key for signing Firefox and Thunderbird Releases » publiée sur le blog sécurité de Mozilla le 10 août 2026 ; certificat de révocation daté du 6 août 2026, motif RFC 4880 code 2. Les recommandations opérationnelles reflètent la position de D-Open et n’engagent que nous.