Aller au contenu
Développement medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Gestion des dépendances : maintenance, sécurité et supply chain

9 min de lecture

Gérer ses dépendances, c’est traiter trois problèmes distincts : choisir les bons composants, les maintenir à jour, et protéger la chaîne d’approvisionnement contre les attaques. Cette page vous aide à identifier lequel de ces problèmes vous concerne et vous oriente vers le bon guide.

Pourquoi la gestion des dépendances est devenue critique

Section intitulée « Pourquoi la gestion des dépendances est devenue critique »

Un projet logiciel moderne repose sur des dizaines, parfois des centaines de composants externes : bibliothèques, frameworks, modules, paquets système. Ces dépendances ne sont pas du code que vous avez écrit, mais du code que vous choisissez de faire tourner en production.

Ce choix a des conséquences directes sur quatre axes :

AxeRisque si mal géréExemple concret
FiabilitéIncompatibilités, régressionsUne mise à jour majeure de React casse votre frontend
VélocitéDette technique, mises à jour massives200 dépendances obsolètes à migrer d’un coup
SécuritéVulnérabilités connues non corrigéesHeartbleed dans OpenSSL : des millions de serveurs exposés
ConformitéLicences incompatibles, audits échouésUne dépendance GPL dans un produit propriétaire

Le piège classique : ne rien faire pendant des mois, puis devoir tout mettre à jour en urgence après la publication d’une CVE critique. Les mises à jour deviennent alors risquées car elles embarquent trop de changements d’un coup.

La gestion des dépendances couvre en réalité trois disciplines distinctes. Les confondre, c’est créer des angles morts.

Avant d’ajouter un paquet à votre projet, évaluez-le :

  • Maintenance active : le projet a-t-il des releases récentes ? Des mainteneurs identifiés ?
  • Surface d’attaque : combien de dépendances transitives le paquet installe-t-il ?
  • Licence : est-elle compatible avec votre usage (MIT, Apache-2.0, GPL) ?
  • Alternatives : existe-t-il une solution plus légère ou intégrée au langage ?

Un bon réflexe : pour chaque nouvelle dépendance, vérifiez le score sur OpenSSF Scorecard et le nombre de dépendances transitives qu’elle embarque.

C’est le quotidien de la maintenance logicielle. L’objectif est de garder un écart minimal entre les versions utilisées et les versions publiées, tout en évitant les régressions.

Les mécanismes fondamentaux à maîtriser :

  • Lockfiles : fichiers qui figent les versions exactes installées (package-lock.json, poetry.lock, go.sum). Sans lockfile, deux installations du même projet peuvent produire des versions différentes.
  • Version pinning : épingler explicitement les versions dans vos fichiers de configuration ("react": "18.3.1" plutôt que "^18.0.0"). Le pinning strict garantit la reproductibilité, mais nécessite des mises à jour régulières.
  • Mises à jour manuelles vs automatiques : les mises à jour manuelles fonctionnent pour un petit projet, mais au-delà de 20-30 dépendances, l’automatisation devient indispensable pour éviter l’accumulation de dette.
  • Dépendances directes vs transitives : vous déclarez express, mais express installe lui-même 30 paquets. Une vulnérabilité dans une dépendance transitive vous affecte tout autant.

La stratégie de test est le filet de sécurité : tests unitaires, tests d’intégration et éventuellement tests end-to-end doivent passer avant de merger une mise à jour.

Ce troisième problème va bien au-delà de la simple mise à jour. Il s’agit de se protéger contre des menaces actives :

MenaceDescriptionExemple
TyposquattingUn paquet au nom presque identique à un paquet populairecolourama au lieu de colorama
Dépendance compromiseUn mainteneur légitime injecte du code malveillantIncident event-stream (npm, 2018)
Mainteneur compromisLe compte d’un mainteneur est piratéPrise de contrôle de paquets populaires
Registre compromisLe serveur de distribution est lui-même attaquéAttaque sur le registre PHP Packagist
Build pipeline compromisLe build produit un artefact différent du code sourceAttaque SolarWinds (2020)

Ces menaces nécessitent des réponses spécifiques : inventaire complet (SBOM), analyse de vulnérabilités, vérification de provenance (SLSA, Sigstore), et politiques CI/CD qui bloquent les composants non vérifiés.

Entre la maintenance quotidienne et la sécurité supply chain se trouve une étape charnière : savoir exactement ce que contient votre application.

Un SBOM est l’inventaire complet de tous les composants logiciels de votre application : dépendances directes, transitives, bibliothèques système. C’est l’équivalent de la liste d’ingrédients sur un emballage alimentaire.

En pratique, un SBOM vous permet de :

  • Réagir vite quand une CVE est publiée : « est-ce que j’utilise ce composant, et où ? »
  • Répondre aux audits de conformité (réglementations CRA, NIS2, exigences clients)
  • Détecter les licences incompatibles avant la mise en production

Des outils comme Syft génèrent un SBOM automatiquement à partir de votre code source, de vos images conteneurs ou de vos lockfiles.

Le SBOM vous dit ce que vous avez. Le VEX vous dit ce qui vous concerne vraiment. Face à une CVE affectant un composant de votre SBOM, le VEX permet de documenter si la vulnérabilité est exploitable dans votre contexte ou non.

Trivy ou Dependency-Track peuvent scanner vos dépendances à chaque commit et bloquer un merge si une vulnérabilité critique est détectée. Cette approche transforme la sécurité des dépendances d’une vérification ponctuelle en un contrôle continu.

Au-delà de 20 dépendances, la mise à jour manuelle devient irréaliste. Deux outils dominent le marché :

CritèreRenovateDependabot
PlateformesGitHub, GitLab, Bitbucket, Azure DevOps, GiteaGitHub uniquement
Gestionnaires supportés90+ (npm, pip, Docker, Terraform, Helm…)~20 écosystèmes
ConfigurationTrès granulaire (packageRules, scheduling, grouping)Simple, peu personnalisable
AutomergeOui, avec conditionsOui, via GitHub Actions
HébergementSaaS (Mend) ou self-hostedIntégré à GitHub

Pour la plupart des équipes, Renovate offre plus de flexibilité, surtout dans un contexte multi-plateforme ou avec de l’infrastructure as code.

  • La gestion des dépendances couvre trois problèmes distincts : choisir, mettre à jour, sécuriser la supply chain
  • Les lockfiles et le version pinning sont la base de la reproductibilité
  • Les dépendances transitives représentent souvent la plus grande surface d’attaque
  • L’automatisation (Renovate, Dependabot) est indispensable au-delà de 20 dépendances
  • Le SBOM est le point de départ pour toute démarche de sécurité : on ne protège que ce qu’on inventorie
  • La sécurité supply chain va bien au-delà des mises à jour : elle couvre les attaques actives sur les registres, mainteneurs et pipelines
  • Un pipeline CI/CD avec scan de vulnérabilités transforme la sécurité des dépendances en contrôle continu

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn