D-OPEN

Comment securiser vos dependances npm dans un projet open source en 8 etapes

Securiser dependances npm projet open source guide
Camille Durand

Camille Durand

Developpeuse DevSecOps · 16 juin 2026 · 13 min de lecture

TL;DR

  • • Lancez npm audit regulierement, verrouillez vos versions avec un package-lock.json commite, et utilisez npm ci dans vos pipelines CI/CD pour garantir des installations deterministes.
  • • Automatisez les mises a jour avec Dependabot ou Renovate, verifiez les signatures des packages, et scannez votre arbre de dependances avec des outils SCA comme Snyk ou Socket.
  • • Definissez une politique de mise a jour claire (patch automatique, minor hebdomadaire, major trimestrielle) et monitorez les alertes de securite en continu pour reagir en moins de 24 heures aux vulnerabilites critiques.

Un projet Node.js moyen embarque entre 300 et 1 500 dependances transitives. Chacune de ces dependances est un vecteur d attaque potentiel. En 2025, le registre npm a enregistre plus de 7 000 packages malveillants retires apres detection — un chiffre en hausse de 40 % par rapport a 2024. L attaque contre event-stream en 2018, le compromis de ua-parser-js en 2021, et plus recemment l incident xz-utils en 2024 ont demontre que la supply chain logicielle est devenue le terrain de chasse prefere des attaquants. Pour les projets open source, ou le code est public et les contributeurs multiples, le risque est encore plus eleve.

Ce guide vous donne 8 etapes concretes et actionnables pour securiser les dependances npm de votre projet open source. Que vous soyez un mainteneur solo a Nantes ou une equipe de 15 developpeurs repartis entre Paris et Lyon, ces pratiques s appliquent a tout projet utilisant l ecosysteme Node.js. Chaque etape est illustree avec des commandes, des configurations, et des exemples de projets reels. Comme nous l avons detaille dans notre article sur comment auditer les dependances npm pour la securite supply chain, la premiere ligne de defense est la connaissance de ce que contient votre arbre de dependances.

WORKFLOW DE SECURISATION DES DEPENDANCES NPM — 8 ETAPES1. AUDITnpm audit + fix2. LOCKFILEpackage-lock.json3. NPM CIInstall deterministe4. DEPENDABOTUpdates auto5. SIGNATURESIntegrite packages6. SAST / SCASnyk, Socket, Trivy7. POLITIQUERegles de mise a jour8. MONITORINGAlertes continuesSUPPLY CHAIN SECURISEEDependances auditees, signees, scannees et monitorees en continuTemps de reaction aux CVE critiques : moins de 24h

Etape 1 — Auditer les dependances existantes avec npm audit

La premiere action est de dresser un etat des lieux. La commande npm audit analyse l arbre complet de vos dependances et compare chaque package contre la GitHub Advisory Database, la base de vulnerabilites la plus complete pour l ecosysteme npm. Elle est integree nativement a npm depuis la version 6 et ne necessite aucune installation supplementaire. Lancez-la a la racine de votre projet :

# Audit complet avec details npm audit # Afficher uniquement les vulnerabilites critiques et hautes npm audit --audit-level=high # Generer un rapport JSON exploitable en CI npm audit --json > audit-report.json # Corriger automatiquement les vulnerabilites compatibles npm audit fix

Le rapport classe les vulnerabilites par severite : critical, high, moderate, low. Concentrez-vous d abord sur les critical et high. Pour chaque vulnerabilite, npm audit indique le package affecte, la version vulnerable, la version corrigee, et le chemin de dependance (votre package → dependance directe → dependance transitive → package vulnerable). Ce chemin est crucial pour comprendre si le fix necessite une mise a jour de votre dependance directe ou si c est une dependance profonde que vous ne controlez pas directement.

Attention : npm audit fix ne corrige que les vulnerabilites resolvables par une mise a jour compatible avec vos contraintes de versioning (semver). Pour les cas ou un fix necessite un saut de version majeure, utilisez npm audit fix --force avec precaution — cette commande peut introduire des breaking changes. Testez systematiquement apres chaque fix force. Des equipes a Paris et a Lyon integrent desormais npm audit comme etape bloquante dans leurs pipelines CI, refusant tout merge si des vulnerabilites critiques sont detectees.

Etape 2 — Configurer un lockfile strict (package-lock.json)

Le package-lock.json est votre meilleur allie contre les attaques de substitution de version. Ce fichier verrouille l arbre exact des dependances — chaque package, chaque version, chaque hash d integrite. Sans lui, un npm install peut resoudre des versions differentes selon le moment ou il est execute, ouvrant la porte a des versions compromises publiees entre deux installations.

Trois regles non negociables pour votre lockfile. Premierement, commitez-le toujours dans votre repository. Ne l ajoutez jamais dans le .gitignore. Deuxiemement, reviewez les changements du lockfile dans chaque pull request. Un diff du lockfile qui ajoute un nouveau registre, qui change un hash d integrite de maniere suspecte, ou qui introduit un package inattendu merite une inspection manuelle. Troisiemement, configurez npm pour empecher l installation sans lockfile :

# .npmrc — a la racine du projet package-lock=true save-exact=true engine-strict=true # Forcer l utilisation du registre officiel uniquement registry=https://registry.npmjs.org/

L option save-exact=true est particulierement importante : elle remplace les prefixes ^ et ~ par des versions exactes dans votre package.json. Combinee avec le lockfile, cette configuration garantit que vous savez exactement ce qui est installe et quand une version change.

Etape 3 — Utiliser npm ci au lieu de npm install en CI/CD

La commande npm ci (clean install) est concu pour les environnements d integration continue. Contrairement a npm install, elle refuse de modifier le lockfile. Si le package.json et le package-lock.json sont desynchronises, npm ci echoue bruyamment au lieu de silencieusement resoudre de nouvelles versions. C est exactement le comportement souhaite en CI : aucune surprise, aucune deviation.

# .github/workflows/ci.yml name: CI on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - run: npm ci - run: npm audit --audit-level=high - run: npm test - run: npm run build

Dans cet exemple de workflow GitHub Actions, npm ci installe exactement ce que le lockfile decrit, npm audit bloque si des vulnerabilites hautes ou critiques sont presentes, et les tests et le build suivent. Bonus : npm ci est egalement plus rapide que npm install car elle supprime le dossier node_modules existant et installe tout a partir de zero, sans resolution de versions. Pour approfondir la securisation de vos pipelines, consultez notre guide sur comment securiser votre pipeline npm contre les attaques supply chain.

Etape 4 — Mettre en place Dependabot ou Renovate

Les mises a jour manuelles ne passent pas a l echelle. Un projet avec 50 dependances directes genere des dizaines de mises a jour par mois. Dependabot (integre a GitHub) et Renovate (par Mend, open source) automatisent ce processus en ouvrant des pull requests de mise a jour avec les changelogs, les notes de version, et les resultats de compatibilite.

# .github/dependabot.yml version: 2 updates: - package-ecosystem: "npm" directory: "/" schedule: interval: "weekly" day: "monday" time: "09:00" timezone: "Europe/Paris" open-pull-requests-limit: 10 reviewers: - "security-team" labels: - "dependencies" - "security" ignore: - dependency-name: "*" update-types: ["version-update:semver-major"]

Cette configuration Dependabot verifie les mises a jour chaque lundi matin (heure de Paris), ouvre jusqu a 10 PRs simultanees, assigne l equipe securite en reviewers, et ignore les mises a jour majeures (qui necessitent une evaluation manuelle). Pour Renovate, la configuration equivalente offre encore plus de granularite — vous pouvez regrouper les mises a jour par type, auto-merger les patchs si les tests passent, et definir des fenetres de maintenance. Notre guide detaille sur la configuration de Dependabot et Renovate pour l audit de securite couvre les deux outils en profondeur.

Un point souvent neglige : ne laissez pas les PRs de mise a jour s accumuler. Une equipe a Toulouse a partage retour d experience avec 47 PRs Dependabot ouvertes et non traitees depuis 3 mois. Le resultat : les PRs entraient en conflit les unes avec les autres, les changelogs devenaient illisibles, et l equipe a fini par toutes les fermer et repartir de zero. Traitez les PRs de mise a jour au moins une fois par semaine. C est un investissement de 30 minutes qui evite des heures de remediation en urgence.

Besoin d un audit de securite de vos dependances npm ?

Audit supply chain, configuration Dependabot/Renovate, mise en place de scanners SCA, formation DevSecOps — notre equipe securise vos projets open source.

Obtenir mon devis gratuit

Etape 5 — Verifier les signatures et l integrite des packages

Depuis npm v8.13, le registre npm signe les packages publies avec des signatures Sigstore basees sur les certificats OIDC. Cela signifie que vous pouvez verifier cryptographiquement qu un package a bien ete publie par le compte npm associe et qu il n a pas ete altere en transit. La commande npm audit signatures verifie les signatures de toutes vos dependances en une seule commande :

# Verifier les signatures de tous les packages installes npm audit signatures # Resultat attendu : # audited 847 packages in 3s # 847 packages have verified registry signatures

Si un package n a pas de signature valide, investiguez immediatement. Cela peut indiquer un package ancien publie avant l introduction des signatures (ce qui est courant), ou un package modifie apres publication (ce qui est alarmant). Le lockfile contient egalement des hashes d integrite (integrity: "sha512-...") pour chaque package. Lors de l installation, npm verifie ces hashes automatiquement. Si un hash ne correspond pas, l installation echoue — c est exactement le comportement souhaite. Ne desactivez jamais cette verification.

Pour les projets critiques, envisagez d utiliser un registre prive comme proxy. Des solutions comme Verdaccio (open source) ou Artifactory permettent de mettre en cache les packages npm et d appliquer des politiques de securite supplementaires : liste blanche de packages approuves, scan automatique avant mise en cache, et isolation du registre public.

Etape 6 — Scanner avec des outils SAST/SCA (Snyk, Socket, etc.)

npm audit detecte les vulnerabilites connues, mais il ne detecte pas les packages malveillants qui n ont pas encore ete signales. C est la que les outils SCA (Software Composition Analysis) avances entrent en jeu. Snyk analyse vos dependances contre sa propre base de vulnerabilites (souvent plus rapide que la GitHub Advisory Database pour les nouveaux CVE) et propose des PRs de remediation automatique. Socket va encore plus loin en analysant le comportement reel du code des packages : acces reseau, execution de scripts post-install, obfuscation, et changements suspects entre versions.

# Snyk CLI — scanner les dependances npx snyk test # Snyk — monitorer en continu (envoie des alertes) npx snyk monitor # Trivy — scanner open source par Aqua Security trivy fs --scanners vuln . # Socket CLI — detecter les comportements suspects npx socket scan

Integrez au moins un de ces outils dans votre pipeline CI. Snyk offre un tier gratuit genereux pour les projets open source (tests illimites). Socket propose une application GitHub gratuite qui commente automatiquement les PRs introduisant des packages suspects. Trivy, developpe par Aqua Security, est entierement open source et peut etre auto-heberge. Pour les equipes qui travaillent sur des projets sensibles, combiner npm audit (vulnerabilites connues) + Socket (comportements suspects) + Snyk (remediation automatique) offre une couverture quasi complete.

VECTEURS D ATTAQUE SUPPLY CHAIN NPM — ET DEFENSESVOTRE PROJETnode_modules (300-1500 deps)TYPOSQUATTINGlodas, expres, reacttDefense : Socket + lockfile reviewDEP CONFUSIONRegistre public vs priveDefense : .npmrc registry scopeACCOUNT TAKEOVERCompromis mainteneurDefense : npm audit signaturesMALICIOUS UPDATEPatch malveillant (event-stream)Defense : Snyk + Renovate pinning8 etapes = 4 vecteurs couverts = supply chain resiliente

Etape 7 — Definir une politique de mise a jour des dependances

Sans politique claire, les mises a jour de dependances tombent dans l une de deux categories : jamais faites (creant une dette de securite massive) ou faites en panique apres la publication d un CVE critique. Les deux scenarios sont dangereux. Definissez une politique ecrite, documentee dans votre SECURITY.md ou votre CONTRIBUTING.md, qui couvre trois niveaux :

Patchs (x.x.PATCH) : auto-merge si les tests CI passent. Les patchs contiennent des corrections de bugs et de securite sans changement d API. Le risque de regression est minimal. Configurez Dependabot ou Renovate pour les merger automatiquement. Mineurs (x.MINOR.x) : review hebdomadaire le lundi matin. Les mineurs ajoutent des fonctionnalites sans breaking changes. Regroupez-les en une seule PR par semaine pour limiter le bruit. Majeurs (MAJOR.x.x) : evaluation trimestrielle planifiee. Les majeurs contiennent des breaking changes qui necessitent des modifications de code. Planifiez un sprint dedie ou une journee de mise a jour par trimestre.

Exception critique : les CVE de severite critical ou high doivent etre traitees dans les 24 heures, quelle que soit le type de mise a jour (patch, minor, ou major). Si un fix de securite necessite un saut de version majeure, c est la securite qui prime. Des equipes a Nantes et a Toulouse ont adopte un systeme de rotation ou un membre de l equipe est designe "security duty" chaque semaine, responsable de traiter les alertes de securite et les PRs de mise a jour. Pour securiser plus largement votre pipeline, consultez notre article sur comment securiser le pipeline CI/CD open source contre la supply chain.

Etape 8 — Monitorer les alertes de securite en continu

La securite des dependances n est pas un evenement ponctuel mais un processus continu. De nouvelles vulnerabilites sont decouvertes chaque jour. Un package qui etait sur hier peut devenir un vecteur d attaque demain si le mainteneur est compromis ou si une vulnerabilite zero-day est publiee. Mettez en place un systeme de monitoring qui vous alerte en temps reel.

GitHub offre les Dependabot security alerts nativement sur chaque repository. Activez-les dans les parametres de securite de votre repo (Settings → Code security and analysis → Dependabot alerts). Ces alertes vous notifient par email et sur l interface GitHub des qu une vulnerabilite connue affecte une de vos dependances. Combinezles avec snyk monitor pour une deuxieme couche de detection :

# Ajouter le monitoring Snyk dans votre CI # (enregistre un snapshot et alerte sur les nouvelles vulns) npx snyk monitor --project-name="mon-projet-oss" # Webhook Slack/Discord pour les alertes critiques # Configurable dans Snyk Dashboard > Integrations # Script de verification periodique (cron job) #!/bin/bash cd /path/to/project npm audit --audit-level=critical --json | jq '.vulnerabilities | length' # Si > 0, envoyer une alerte

Configurez des notifications Slack ou Discord pour les alertes de severite haute et critique. L objectif est un temps de reaction inferieur a 24 heures pour les CVE critiques. Documentez votre processus de reponse aux incidents de securite dans un fichier SECURITY.md a la racine du projet : qui est responsable, comment evaluer la severite, quand publier un advisory, et comment communiquer avec les utilisateurs affectes. L outil GitHub Security Advisories permet de publier des advisories coordonnees avec un CVE attribue.

Un dernier point sur la profondeur de l arbre de dependances. Notre analyse du cas Mini Shai-Hulud de TanStack avec 169 paquets et 518 millions de telechargements a montre comment un seul ecosysteme de packages populaires cree un reseau d interdependances massif. Chacun de ces paquets est un maillon de la chaine. Monitorez non seulement vos dependances directes mais aussi les dependances de profondeur 2 et 3, ou se cachent souvent les vulnerabilites les plus dangereuses car elles passent inapercues plus longtemps.

FAQ

Quelle est la difference entre npm audit et un scanner SCA comme Snyk ?

npm audit interroge la base de donnees GitHub Advisory Database et verifie vos dependances contre les vulnerabilites connues. C est un outil natif, gratuit et immediat. Un scanner SCA comme Snyk ou Socket va plus loin : il analyse les comportements suspects dans le code des packages (acces reseau, execution de scripts post-install, obfuscation), detecte les typosquatting, et offre des fonctionnalites de remediation automatique avec des pull requests de mise a jour. npm audit est un minimum indispensable, un SCA est une couche de protection supplementaire recommandee pour les projets critiques.

Faut-il commiter le fichier package-lock.json dans un projet open source ?

Oui, absolument. Le package-lock.json garantit que tous les contributeurs et les environnements CI/CD installent exactement les memes versions de dependances. Sans lockfile commite, chaque npm install peut resoudre des versions differentes, ce qui cree des bugs non reproductibles et ouvre la porte a des attaques de substitution de version. Le lockfile doit etre commite, revise dans les PRs, et utilise avec npm ci en CI/CD pour garantir une installation deterministe et reproductible.

Dependabot ou Renovate : lequel choisir pour un projet open source ?

Dependabot est integre nativement a GitHub, zero configuration necessaire, et convient parfaitement aux projets simples avec moins de 30 dependances. Renovate (de Mend) offre plus de flexibilite : regroupement de PRs par type, regles de merge automatique configurables, support multi-plateforme (GitHub, GitLab, Bitbucket), et presets partageables entre projets d une meme organisation. Pour un projet open source moyen heberge sur GitHub, Dependabot suffit. Pour un monorepo complexe, un multi-repo, ou un projet heberge sur GitLab, Renovate offre un controle plus fin. Les deux sont entierement gratuits pour l open source.

Comment se proteger contre les attaques de typosquatting sur npm ?

Le typosquatting consiste a publier un package malveillant avec un nom tres proche d un package populaire (par exemple lodas au lieu de lodash, o expres au lieu de express). Pour se proteger : verifiez toujours le nom exact du package et le nombre de telechargements hebdomadaires avant installation, utilisez un scanner comme Socket qui detecte les packages suspects recemment publies, activez npm audit signatures pour verifier l authenticite des publications, et configurez un fichier .npmrc avec un registre de confiance. En entreprise, un registre prive (Verdaccio, Artifactory) qui proxy le registre npm public avec une liste blanche de packages approuves est la meilleure protection contre le typosquatting et la dependency confusion.

Formation DevSecOps et securite supply chain pour equipes

Audit de dependances, configuration Snyk/Socket, politique de mise a jour, reponse aux incidents — formation sur mesure pour votre equipe de developpement.

Demander un accompagnement

Articles lies :

Source : npm audit — npm Documentation officielle