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.