Incidents de référence
La page Risques de chaîne d’approvisionnement classe les mécanismes. Celle-ci documente ce qui s’est réellement produit.
La distinction n’est pas cosmétique. Une typologie se conteste ; une compromission datée, avec son éditeur, son numéro de vulnérabilité et son périmètre, ne se conteste pas. C’est l’argument qui débloque un budget et qui fait accepter une contrainte d’ingénierie.
Une précaution de lecture. Chaque entrée renvoie à une contre-mesure. Il ne faut pas en conclure qu’elle aurait empêché l’attaque : dans plusieurs cas, rien de ce qui est recommandé ici n’aurait suffi. La colonne indique ce qui aurait réduit le délai de détection ou l’ampleur, ce qui est déjà l’essentiel.
La série
| Date | Incident | Mécanisme | Ce qui aurait limité |
|---|---|---|---|
| Juin 2017 | M.E.Doc / NotPetya | Canal de mise à jour d’un éditeur compromis, propagation par une mise à jour légitime | Segmentation, moindre privilège du compte de mise à jour |
| Sept. 2017 | CCleaner | Environnement de construction de l’éditeur compromis ; le binaire malveillant portait une signature légitime | Attestations de provenance, isolation du service de construction |
| Nov. 2018 | event-stream (npm) | Le mainteneur cède le projet à un inconnu, qui ajoute une dépendance malveillante ciblant un portefeuille de cryptomonnaie | Surveillance du changement de mainteneur, revue des nouvelles dépendances |
| Déc. 2020 | SolarWinds Orion (SUNBURST) | Système de construction compromis, porte dérobée insérée entre le code source vérifié et l’artefact distribué | Builds reproductibles, provenance signée par le service de construction |
| Févr. 2021 | Confusion de dépendances | Travaux de recherche montrant qu’un paquet public prend le pas sur un paquet interne homonyme, chez plusieurs grands éditeurs | Espaces de noms réservés, priorité de résolution explicite, registre interne |
| Avr. 2021 | Codecov | Le script d’envoi de couverture est modifié pendant des mois et exfiltre les variables d’environnement des chaînes de CI qui l’exécutent | Vérification d’empreinte du script, moindre privilège des jetons, filtrage sortant |
| Juil. 2021 | Kaseya VSA | Un logiciel d’administration à distance sert de vecteur de distribution d’un rançongiciel vers les clients finaux | Segmentation, contrôle des canaux d’administration |
| Oct. 2021 | ua-parser-js (npm) | Compte de mainteneur détourné, versions malveillantes publiées sur un paquet très largement utilisé | Authentification forte sur les comptes de publication, quarantaine des nouvelles versions |
| Déc. 2021 | Log4Shell (CVE-2021-44228) | Non pas une attaque de la chaîne, mais une vulnérabilité critique dans un composant ubiquitaire : la question devient « où est-il chez vous ? » | SBOM centralisé : réponse en minutes plutôt qu’en semaines |
| Mars 2022 | node-ipc | Code destructeur introduit délibérément par le mainteneur lui-même, pour des motifs politiques | Verrouillage de versions, revue avant montée de version |
| Mars 2023 | 3CX | Installeur compromis — et compromission en cascade : l’éditeur avait lui-même été atteint par un logiciel tiers trojanisé | Diligence sur les fournisseurs des fournisseurs, vérification de signature |
| Mars 2024 | xz / liblzma (CVE-2024-3094) | Ingénierie sociale sur plus de deux ans pour obtenir la maintenance du projet, puis porte dérobée visant le service SSH. CVSS 10 | Peu de choses — voir ci-dessous |
| Juin 2024 | polyfill.io | Le domaine servant un script à des centaines de milliers de sites est racheté, puis sert du code malveillant | Auto-hébergement des ressources, contrôle d’intégrité des sous-ressources |
| Mars 2025 | tj-actions/changed-files (CVE-2025-30066) | Les étiquettes de version d’une action de CI sont repointées vers un commit malveillant qui écrit les secrets dans les journaux | Épinglage par empreinte plutôt que par étiquette, journaux non publics |
Cinq incidents qui enseignent quelque chose de précis
SolarWinds — la signature ne dit rien du contenu
La porte dérobée a été insérée dans le système de construction, entre un code source intègre et un artefact distribué. Le binaire livré était authentiquement signé par l’éditeur : toute vérification de signature côté client passait.
Ce que ça change pour vous. Signer un artefact prouve qui l’a publié, pas ce qu’il contient ni comment il a été produit. C’est exactement l’écart que comblent les attestations de provenance : elles décrivent le dépôt, la révision, la chaîne et les paramètres de construction. Un service de construction isolé, dont les étapes définies par l’utilisateur ne peuvent pas atteindre le matériel de signature, est la réponse structurelle.
Codecov — la CI est une cible, pas un outil neutre
Un script téléchargé et exécuté par des milliers de chaînes d’intégration a été modifié discrètement, et a exfiltré pendant des mois le contenu des variables d’environnement — donc les jetons, clés et identifiants qui s’y trouvaient.
Ce que ça change pour vous. Tout ce que la chaîne de construction exécute fait partie du produit. Voir Sécuriser la chaîne de construction.
xz — l’incident qui résiste à vos contre-mesures
Deux ans de contributions légitimes pour obtenir la confiance du mainteneur, puis une porte dérobée dissimulée dans les archives de publication — absente du dépôt de code — visant l’authentification SSH. Découverte par accident, par un ingénieur intrigué par une consommation processeur anormale.
Ce que ça change pour vous. Aucune grille de diligence n’aurait écarté ce projet : il était actif, maintenu, largement audité, et présent dans toutes les distributions. Deux leçons seulement, et elles sont modestes :
- la divergence entre le dépôt et l’archive publiée était le signal ; le construire soi-même depuis les sources, ou vérifier que l’archive correspond au dépôt, l’aurait révélée ;
- un mainteneur unique sous pression est un critère de risque, et il figure dans votre grille d’évaluation.
Il faut savoir dire qu’un dispositif a des limites. Prétendre l’inverse décrédibilise le reste.
polyfill.io — la dépendance qu’on ne compte pas
Un script chargé depuis un domaine tiers n’apparaît dans aucun manifeste, dans aucun SBOM produit depuis un gestionnaire de paquets. Le rachat du domaine a suffi à transformer une dépendance invisible en vecteur.
Ce que ça change pour vous. Les ressources chargées à l’exécution depuis un tiers sont une dépendance à part entière, qui doit être inventoriée et justifiée comme les autres. Ce site en charge exactement une — la mesure d’audience servie par son propre hébergeur — et un contrôle de build échoue si une seconde apparaît : la discipline utile n’est pas de promettre zéro, mais de savoir énumérer. C’est l’un des angles morts du frontend web.
tj-actions — une étiquette n’est pas une empreinte
L’attaquant n’a pas eu besoin de publier une version : il a repointé les étiquettes existantes vers un commit malveillant. Toutes les chaînes qui référençaient l’action par son étiquette ont exécuté le nouveau code au build suivant, et ont écrit leurs secrets dans des journaux souvent publics.
Ce que ça change pour vous. L’épinglage par empreinte n’est pas un raffinement : c’est la seule référence immuable. Voir Verrouiller et mettre à jour les dépendances.
Ce que la série montre
Le point de compromission remonte la chaîne. Les cas anciens visaient le canal de distribution ; les récents visent le système de construction, les comptes de publication et l’outillage de CI. Plus on remonte, plus la signature du produit final devient sans valeur, puisqu’elle est apposée après la compromission.
Le délai de détection compte plus que la prévention. Aucune des quatorze n’a été empêchée par un contrôle automatisé. Plusieurs ont été trouvées par hasard. Ce qui distingue les organisations, c’est le temps qu’il leur a fallu pour répondre à « êtes-vous concernés ? » — de quelques minutes à plusieurs semaines, selon qu’elles disposaient ou non d’un inventaire centralisé.
Le lien avec le règlement est direct. L’article 13, paragraphe 5, impose une diligence documentée sur les composants tiers ; l’annexe I, partie I, impose la limitation des surfaces d’attaque et la protection de l’intégrité. Ces quatorze cas décrivent précisément les surfaces qu’il faut réduire.
Cette liste est une sélection, pas un inventaire. Elle retient des incidents documentés publiquement et bien établis, choisis pour couvrir chaque mécanisme de la typologie. Les campagnes les plus récentes ont industrialisé certains de ces motifs — notamment les vers auto-répliquants sur les registres de paquets, qui abusent des jetons de publication dérobés pour se propager de paquet en paquet sans intervention humaine. Tenir cette page à jour relève du processus de veille.