Aller au contenu

L'attaque de la chaîne d'approvisionnement logicielle en une page

Pourquoi forcer mille portes quand on peut se faire livrer par le fournisseur, signature comprise, avec le bon de livraison et les remerciements du client ?

Schéma animé en cinq étapes, suivi des parades. Un : un attaquant, qui a volé le compte d'un mainteneur ou choisi un nom presque identique à un paquet connu, publie dans un registre public une version piégée, lib-date 4.2.1 à côté de la saine 4.2.0, ou un nom voisin, lib-dates 1.0.0. Deux : le pipeline de build récupère la dépendance sans la relire. Trois : il compile le produit puis le signe ; la signature est valide, le contenu est piégé. Signé veut dire « sorti de chez nous », pas « sain ». Quatre : la mise à jour part chez les clients. Cinq : les clients A, B, C et D l'installent, en confiance, par mise à jour automatique. Puis les parades coupent la chaîne : A, versions verrouillées avec leurs empreintes, à l'entrée du build ; B, un SBOM qui dit ce qui est embarqué ; C, signature et provenance vérifiées avant installation ; D, des builds reproductibles ; E, un pipeline au moindre privilège. Limite : un mainteneur de confiance qui trahit en passe beaucoup, on mise aussi sur la détection.

  • On attaque le fournisseur pour atteindre ses clients. Le code malveillant entre en amont (une dépendance, un outil de build, un serveur de mise à jour) et descend la chaîne avec le reste, porté par les mécanismes mêmes qui inspirent confiance : registre officiel, pipeline maison, signature de l’éditeur, mise à jour automatique.
  • SolarWinds, 2020. Des attaquants installés dans l’environnement de build de l’éditeur ont glissé une porte dérobée (SUNBURST) dans les mises à jour du logiciel de supervision Orion, compilées et signées normalement. L’éditeur a estimé à moins de 18 000 le nombre de clients ayant installé une version piégée ; l’affaire a été découverte en décembre 2020.
  • xz-utils, 2024 (CVE-2024-3094). Un contributeur a gagné en deux ans la confiance du projet jusqu’à en devenir comainteneur, puis a publié les versions 5.6.0 et 5.6.1 avec une porte dérobée visant le serveur SSH de certaines distributions Linux. Le code piégé était caché dans les archives publiées et les fichiers de test, pas lisible tel quel dans le dépôt. Un développeur l’a repérée fin mars 2024 en cherchant pourquoi SSH prenait une demi-seconde de trop, avant qu’elle n’atteigne les versions stables des grandes distributions.
  • event-stream, 2018. Le mainteneur d’un paquet npm très utilisé, lassé, en a confié la maintenance à un volontaire, qui a ajouté une dépendance (flatmap-stream) contenant un code destiné à voler les portefeuilles d’une application de bitcoins précise. Personne n’avait rien piraté : on avait simplement demandé gentiment.
  • Le typosquattage se passe de tout cela : publier lib-dates en comptant sur ceux qui voulaient lib-date, ou sur un outil qui l’invente à leur place.
  • Les parades : versions verrouillées avec empreintes (fichier de verrouillage, aucune mise à jour silencieuse), SBOM (SPDX ou CycloneDX) pour savoir ce qui est embarqué et retrouver vite un composant mis en cause, signatures et attestations de provenance vérifiées avant installation (Sigstore pour signer, SLSA pour décrire et durcir la fabrication), builds reproductibles qui permettent à un tiers de retrouver le même binaire, et pipelines au moindre privilège (secrets courts, droits limités, pas d’accès au réseau inutile).
  • Aucune ne suffit seule. Le verrouillage fige aussi une version déjà piégée, le SBOM inventorie sans juger, la signature atteste l’origine et rien d’autre. Ensemble, elles réduisent les occasions et accélèrent la détection.

Pour aller plus loin : La chaîne d’approvisionnement logicielle · Attaques supply chain et protection des dépendances · Maîtriser le risque des dépendances transitives · SLSA : niveaux Build, provenance in-toto et vérification · SBOM pour inventorier les composants réellement exécutés · Pourquoi les builds reproductibles échouent souvent · Sécuriser les secrets et permissions CI/CD.

À lire aussi

Pages voisines