Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Dependency Pinning

devsecops

Définition

Le Dependency Pinning (épinglage des dépendances) est la pratique de spécifier explicitement et rigoureusement les versions exactes de toutes les dépendances directes et transitives d'un projet logiciel, plutôt que d'autoriser des plages de versions (version ranges) qui pourraient être résolues différemment selon l'environnement ou le moment d'installation. En DevSecOps, le Dependency Pinning est un contrôle de supply chain fondamental car il garantit la reproductibilité des builds — le même code source produit exactement le même binaire, avec les mêmes dépendances, quel que soit le moment où le build est exécuté. La problématique du dependency pinning sans épinglage strict : une dépendance spécifiée comme ">=1.0.0" (npm) ou "^1.0.0" (semver) sera résolue au moment de l'installation vers la dernière version compatible, qui peut changer d'un jour à l'autre. Cette non-déterminisme crée des risques de sécurité : si une version compromise d'une bibliothèque est publiée dans un registre de packages (attaque de supply chain npm, PyPI), un build non épinglé pourrait automatiquement l'inclure sans aucune alerte. Les mécanismes d'épinglage varient selon l'écosystème : npm/yarn utilisent les lockfiles (package-lock.json, yarn.lock) qui fixent les versions exactes de toutes les dépendances transitives et leurs checksums d'intégrité — les lockfiles doivent être committés dans Git. Python utilise pip-compile (pip-tools) pour générer un requirements.txt avec toutes les versions exactes depuis les requirements.in de haut niveau. Go utilise go.sum qui contient les checksums cryptographiques de toutes les dépendances. Maven et Gradle utilisent des dependency locking plugins. L'épinglage des actions GitHub dans les workflows CI/CD par hash de commit (uses: actions/checkout@v4 vs uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11) est une pratique de sécurité critique : épingler par tag est insuffisant (les tags GitHub sont mutables et peuvent pointer vers du code différent) — seul l'épinglage par hash de commit SHA garantit l'immutabilité de l'action utilisée.

Lockfiles et reproductibilité des builds

Les lockfiles garantissent la reproductibilité : package-lock.json (npm) et yarn.lock (Yarn) fixent les versions exactes et les hashes d'intégrité de toutes les dépendances directes et transitives. Committer le lockfile dans Git est obligatoire pour la sécurité supply chain : sans lockfile commité, chaque développeur et chaque runner CI peut obtenir des versions légèrement différentes. Vérification CI : npm ci (respecte strictement le package-lock.json et échoue si incohérent) vs npm install (peut mettre à jour le lockfile). Toujours utiliser npm ci en CI/CD pour garantir l'utilisation exacte du lockfile.

Épingler les GitHub Actions par hash de commit

L'épinglage des GitHub Actions par tag (actions/checkout@v4) est insuffisant : les tags GitHub sont mutables (un mainteneur malveillant ou compromis peut déplacer le tag v4 vers un commit différent). L'épinglage par hash SHA est immuable : uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 — ce hash référence exactement et immuablement ce commit. L'outil pin-github-action automatise la conversion des tags en hashes dans les workflows GitHub Actions. Dependabot peut ensuite maintenir ces hashes à jour automatiquement (GitHub Actions version updates).

Mise à jour sécurisée des dépendances épinglées

L'épinglage crée un défi de maintenance : les versions épinglées ne se mettent pas à jour automatiquement, et des dépendances avec des CVEs non patchées peuvent rester en production si personne ne déclenche les mises à jour. La solution : automatiser les mises à jour de dépendances avec des outils qui créent des Pull Requests avec les nouvelles versions (Dependabot, Renovate Bot). Ces PRs incluent les changelogs, les CVEs corrigées, et les nouveaux checksums — elles sont revues et mergées par les développeurs. L'automatisation maintient les dépendances épinglées à jour sans effort manuel tout en conservant le contrôle humain sur chaque mise à jour.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis