D-OPEN

Comment auditer vos dependances open source contre les attaques supply chain en 7 etapes

Auditer dependances open source contre attaques supply chain
Thomas Bernard

Thomas Bernard

Ingenieur securite DevOps · 12 juin 2026 · 12 min de lecture

TL;DR

  • • En mai-juin 2026, 317 packages npm malveillants, le ver Miasma sur 73 depots Microsoft, et des projets open source Microsoft pirates illustrent l'explosion des attaques supply chain.
  • • Ce guide detaille 7 etapes operationnelles pour auditer vos dependances : inventaire SBOM, scan automatise, verification de provenance, audit de gouvernance, lockfile strict, pare-feu de dependances, et surveillance continue.
  • • Applicable immediatement sur npm, PyPI et GitHub avec des outils 100 pourcent open source et gratuits (Trivy, Grype, OSV-Scanner, Dependabot, Renovate).

Le premier semestre 2026 restera dans les annales de la securite logicielle comme un point d'inflexion. En mai, 317 packages npm malveillants ont ete decouverts en une seule operation coordonnee, ciblant des bibliotheques populaires via du typosquatting et de l'injection de code dans les scripts postinstall. Debut juin, le ver Miasma a compromis 73 depots Microsoft sur GitHub en exploitant des tokens d'acces personnel expires mais jamais revoques. Et la decouverte que plusieurs projets open source Microsoft avaient ete pirates pour injecter du malware voleur de mots de passe a mis en lumiere la fragilite structurelle de la chaine d'approvisionnement logicielle.

Ces incidents ne sont pas des evenements isoles. Selon le rapport OpenSSF de 2026, les attaques supply chain sur les ecosystemes open source ont augmente de 742 pourcent entre 2019 et 2025. Le registre npm a lui seul contient plus de 3 millions de packages, dont une fraction non negligeable est abandonnee, compromise, ou malveillante des l'origine. L'ANSSI recommande desormais explicitement aux entreprises francaises d'auditer systematiquement leurs dependances tierces dans le cadre de la conformite NIS2.

Ce guide vous donne les 7 etapes concretes et operationnelles pour auditer vos dependances open source et vous premunir contre les attaques supply chain. Chaque etape inclut des commandes, des outils, et des configurations que vous pouvez appliquer immediatement. Pas de theorie abstraite — du concret, teste en production sur des projets Node.js et Python en France.

Etape 1 : Inventorier toutes vos dependances

Vous ne pouvez pas securiser ce que vous ne connaissez pas. La premiere etape consiste a dresser un inventaire exhaustif de toutes les dependances de votre projet — directes et transitives. Un projet Node.js moyen embarque entre 800 et 1 500 packages transitifs. Un projet Python Django typique en contient entre 150 et 400. Chacun de ces packages est un vecteur d'attaque potentiel.

Pour Node.js, commencez par lister l'arbre complet des dependances avec npm ls --all. Pour Python, utilisez pip freeze ou mieux, pip-audit --desc pour obtenir des informations de vulnerabilite en meme temps. L'etape critique est de generer un SBOM (Software Bill of Materials) au format standardise CycloneDX ou SPDX :

# Inventaire Node.js — arbre complet des dependances
npm ls --all --json > dependances-audit.json

# Inventaire Python — packages installes avec versions
pip freeze > requirements-audit.txt
pip-audit --desc --format json > pip-audit-results.json

# Generation SBOM au format CycloneDX (recommande ANSSI)
npx @cyclonedx/cyclonedx-npm --output-file sbom-npm.json
# Python SBOM
cyclonedx-py environment --output sbom-python.json

# Generation SBOM au format SPDX avec Syft (Anchore)
syft dir:. -o spdx-json > sbom-spdx.json

Le SBOM est votre document de reference. Il doit etre genere automatiquement a chaque build CI/CD et archive. En cas d'incident supply chain — comme les 317 packages npm de mai 2026 — vous pouvez immediatement croiser votre SBOM avec la liste des packages compromis pour savoir si vous etes impacte. Sans SBOM, vous devez auditer manuellement chaque projet, ce qui prend des heures au lieu de secondes.

Etape 2 : Scanner avec des outils automatises

Une fois l'inventaire dresse, il faut scanner chaque dependance contre les bases de vulnerabilites connues. Plusieurs outils open source permettent cela, chacun avec ses forces. L'approche recommandee est de combiner au moins deux outils pour maximiser la couverture, car aucun outil seul ne detecte 100 pourcent des vulns. Le npm audit natif est un bon point de depart mais ne couvre que l'ecosysteme npm et manque souvent les vulnerabilites publiees dans les 24 premieres heures.

# Scan npm natif — bon premier reflexe
npm audit --json > npm-audit-results.json
npm audit fix  # correction automatique quand possible

# Trivy (Aqua Security) — multi-ecosysteme, tres rapide
trivy fs --scanners vuln --format json --output trivy-results.json .
trivy sbom sbom-npm.json  # scan a partir du SBOM

# Grype (Anchore) — base de donnees vulnerabilites tres a jour
grype dir:. --output json > grype-results.json
grype sbom:sbom-npm.json  # scan SBOM directement

# OSV-Scanner (Google) — couvre npm, PyPI, Go, Rust, Maven
osv-scanner --format json --lockfile package-lock.json
osv-scanner --format json --lockfile requirements.txt

# Snyk (gratuit jusqu a 200 tests/mois)
snyk test --json > snyk-results.json
snyk monitor  # surveillance continue

La strategie optimale en 2026 est d'integrer Trivy ou Grype dans votre pipeline CI/CD comme gate obligatoire, et d'utiliser npm audit localement comme filet de securite rapide pendant le developpement. Pour les projets Python, pip-audit de la Python Packaging Authority est l'equivalent natif. Definissez un seuil de severite — par exemple, bloquer le build pour toute vulnerabilite high ou critical — et documenter les exceptions avec justification et date d'expiration. Nous avons detaille cette approche dans notre guide comment securiser votre pipeline npm.

Etape 3 : Verifier les signatures et la provenance

Scanner les vulnerabilites connues ne suffit pas. Les attaques supply chain les plus sophistiquees de 2026 — comme celle des 317 packages npm de mai — impliquent du code malveillant qui n'est dans aucune base CVE au moment de l'attaque. La verification de provenance permet de s'assurer qu'un package a bien ete construit a partir du code source que vous voyez sur GitHub, et qu'il n'a pas ete modifie entre le repository et le registre.

# Verifier les signatures de provenance npm (depuis npm v9)
npm audit signatures
# Resultat attendu : "audited X packages, all have valid signatures"

# Verifier la provenance d un package specifique
npm view express --json | jq '.dist.attestations'

# Verifier la provenance SLSA (Supply-chain Levels for Software Artifacts)
slsa-verifier verify-npm-package express-4.21.0.tgz \
  --source-uri github.com/expressjs/express

# Sigstore — verification de signature pour tout artefact
cosign verify-blob --signature artifact.sig \
  --certificate artifact.crt artifact.tar.gz

# Python — verifier les hashes des packages
pip install --require-hashes -r requirements.txt

La specification SLSA (Supply-chain Levels for Software Artifacts), promue par Google et l'OpenSSF, definit quatre niveaux de garantie pour la provenance des artefacts logiciels. En 2026, la majorite des packages npm populaires (plus de 10 000 telechargements par semaine) supportent la provenance npm basee sur Sigstore. Si un package que vous utilisez ne fournit aucune attestation de provenance, c'est un signal d'alerte qui merite une investigation manuelle. Pour approfondir ce sujet, consultez notre article sur l'audit de securite des dependances npm.

Etape 4 : Auditer les mainteneurs et la gouvernance

L'attaque supply chain la plus insidieuse n'est pas technique — c'est sociale. Un attaquant qui prend le controle d'un compte de mainteneur npm peut publier une version malveillante d'un package populaire, et elle sera telechargee des millions de fois avant detection. Le cas event-stream de 2018 a montre le schema : un mainteneur fatigue accepte un nouveau contributeur qui gagne progressivement la confiance, puis injecte du code malveillant. Ce schema se repete en 2026 a une echelle industrielle.

Pour chaque dependance critique (celles qui touchent a l'authentification, au reseau, au filesystem, ou a la serialisation), verifiez manuellement : le bus factor (combien de mainteneurs actifs — si c'est 1, c'est un risque), l'historique des commits (frequence, coherence), les changements recents de mainteneurs (un nouveau mainteneur qui fait un npm publish dans les 48 heures apres avoir ete ajoute est un signal d'alerte maximal), et la presence de scripts postinstall dans le package.json. Un postinstall qui telecharge et execute du code distant est le vecteur numero un des packages malveillants npm en 2026 — c'est exactement ce mecanisme qu'utilisaient les 317 packages npm compromis de mai 2026.

Utilisez npm info <package> maintainers pour lister les mainteneurs actuels et npm info <package> time pour voir l'historique des publications. L'outil Socket.dev automatise une partie de cette analyse en detectant les changements de mainteneurs, les scripts d'installation suspects, et les appels reseau inattendus dans le code des packages.

WORKFLOW D'AUDIT DES DEPENDANCES — 7 ETAPES SUPPLY CHAIN1. INVENTAIRESBOM + npm lsCycloneDX / SPDX2. SCAN AUTOTrivy + Grypenpm audit + Snyk3. PROVENANCESigstore + SLSAnpm audit signatures4. GOUVERNANCEBus factorMainteneurs + commits5. LOCKFILEPinning strictHashes integrite6. PARE-FEUProxy registreVerdaccio / Nexus7. SURVEILLANCE CONTINUEDependabot + Renovate + OSV.devAlertes temps reel sur nouvelles CVEDETECTION PROACTIVEEtapes 1-3 : identifier les risques connusInventaire + Scan + ProvenanceDURCISSEMENTEtapes 4-6 : reduire la surface d attaqueGouvernance + Lockfile + Pare-feuSURVEILLANCEEtape 7 : reagir aux nouvelles menacesAutomatisation + Alertes + RemediationBoucle continue — chaque nouvelle dependance relance le cycle

Etape 5 : Configurer le lockfile et le pinning strict

Le lockfile est votre premiere ligne de defense contre les modifications inattendues de dependances. Le package-lock.json (npm) ou yarn.lock fixe les versions exactes et les hashes d'integrite de chaque package installe. Si un attaquant modifie le contenu d'un package sur le registre npm sans changer la version (ce qui est theoriquement impossible mais a deja ete observe via des failles dans les registres), le hash du lockfile ne correspondra plus et l'installation echouera.

# Toujours utiliser npm ci en CI/CD (pas npm install)
# npm ci respecte strictement le lockfile
npm ci

# Verifier que le lockfile est a jour et coherent
npm install --package-lock-only
git diff package-lock.json  # aucun changement attendu

# Activer le mode strict dans .npmrc
echo "save-exact=true" >> .npmrc         # versions exactes, pas de ^
echo "package-lock=true" >> .npmrc       # lockfile obligatoire
echo "ignore-scripts=true" >> .npmrc     # bloquer postinstall par defaut

# Python — pinning strict avec pip-compile
pip-compile --generate-hashes requirements.in > requirements.txt
pip install --require-hashes -r requirements.txt

# Verifier l integrite du lockfile en CI
npx lockfile-lint --type npm --path package-lock.json \
  --allowed-hosts npm --validate-https

Le parametre ignore-scripts=true dans le .npmrc est particulierement important : il bloque l'execution automatique des scripts postinstall, preinstall, et prepare des packages. C'est le vecteur d'attaque numero un des packages malveillants. Vous devrez manuellement autoriser les scripts pour les packages qui en ont legitimement besoin (comme esbuild ou sharp) via une liste blanche dans le .npmrc. Pour plus de details, voir notre guide configurer un pare-feu de dependances npm.

Etape 6 : Mettre en place un pare-feu de dependances

Un pare-feu de dependances est un registre proxy qui se place entre vos developpeurs et le registre npm public (ou PyPI). Au lieu de telecharger directement depuis registry.npmjs.org, vos outils passent par votre proxy qui peut appliquer des politiques de securite : bloquer les packages sans provenance, interdire les packages publies depuis moins de 72 heures (quarantaine), bloquer les typosquats connus, et cacher les packages approuves pour accelerer les builds.

Trois solutions open source dominent ce segment en 2026. Verdaccio est le plus simple a deployer — un serveur Node.js leger qui peut tourner sur un VPS a 5 EUR par mois. Sonatype Nexus Repository OSS est plus complet avec support multi-format (npm, PyPI, Maven, Docker) et des politiques de firewall integrees. JFrog Artifactory (version Community) offre des fonctionnalites similaires avec une interface graphique plus polie. Le choix depend de votre taille d'equipe : Verdaccio pour les equipes de 1 a 10 developpeurs, Nexus ou Artifactory au-dela.

Le point critique est de rediriger tous les postes developpeurs et tous les runners CI/CD vers votre proxy. Aucune installation ne doit jamais contacter directement le registre public. Configurez cela dans le .npmrc du projet : registry=https://npm.votre-entreprise.fr. Bloquez registry.npmjs.org en sortie sur votre firewall reseau pour eviter les contournements.

Audit supply chain pour votre equipe

Inventaire SBOM, scan de vulnerabilites, mise en place du pare-feu de dependances et formation equipe — nous securisons votre chaine d'approvisionnement logicielle.

Demander un audit supply chain

Etape 7 : Automatiser la surveillance continue

L'audit ponctuel ne suffit pas. De nouvelles vulnerabilites sont publiees chaque jour — en moyenne 85 CVE par jour toutes plateformes confondues en 2026 selon la NVD. Vous devez automatiser la surveillance pour etre alerte immediatement quand une dependance de votre projet est impactee par une nouvelle CVE ou quand un package que vous utilisez change de mainteneur.

# .github/dependabot.yml — configuration Dependabot
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "daily"
    open-pull-requests-limit: 10
    labels:
      - "dependencies"
      - "security"
    reviewers:
      - "security-team"
    # Grouper les mises a jour mineures
    groups:
      minor-and-patch:
        update-types:
          - "minor"
          - "patch"

  - package-ecosystem: "pip"
    directory: "/"
    schedule:
      interval: "daily"
    open-pull-requests-limit: 5

# renovate.json — configuration Renovate (alternative)
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:recommended", "security:openssf-scorecard"],
  "vulnerabilityAlerts": { "enabled": true },
  "schedule": ["every weekend"],
  "prConcurrentLimit": 5,
  "packageRules": [
    {
      "matchUpdateTypes": ["major"],
      "labels": ["breaking-change"],
      "automerge": false
    },
    {
      "matchUpdateTypes": ["patch"],
      "automerge": true,
      "automergeType": "branch"
    }
  ]
}

# OSV-Scanner en CI — GitHub Actions workflow
# .github/workflows/osv-scan.yml
name: OSV Vulnerability Scan
on:
  push:
    branches: [main]
  pull_request:
  schedule:
    - cron: '0 6 * * *'  # tous les jours a 6h
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: google/osv-scanner-action/osv-scanner-action@v2
        with:
          scan-args: |-
            --lockfile=package-lock.json
            --lockfile=requirements.txt

La strategie recommandee est de deployer Dependabot ou Renovate (pas les deux — choisissez-en un) pour les mises a jour automatiques de dependances, et d'ajouter OSV-Scanner comme check CI/CD supplementaire pour la couverture multi-ecosysteme. Dependabot est integre nativement a GitHub et ne necessite aucune infrastructure — c'est le choix le plus simple. Renovate offre plus de flexibilite (auto-merge des patchs, groupement des mises a jour, support de plus de plateformes). Pour un guide detaille sur la configuration, consultez notre article configurer Dependabot et Renovate pour l'audit de securite.

MATRICE DE RISQUE — TYPES D'ATTAQUES SUPPLY CHAIN 2026SEVERITE DE L'IMPACTPROBABILITE D'OCCURRENCECritiqueHauteMoyenneFaibleRareOccasionnelFrequentTres frequentTYPOSQUATTING317 packages npm mai 2026Frequent + Impact moyenMAINTAINER TAKEOVERCompromission de compte npmOccasionnel + Impact critiqueDEPENDENCY CONFUSIONPackage interne vs publicOccasionnel + Impact hautCI/CD COMPROMISEVer Miasma juin 2026Rare + Impact critiqueMISE A JOUR MALVEILLANTEVersion backdooree publieeFrequent + Impact hautPACKAGE ABANDONNECVE non patcheeTres frequent + Impact faibleRisque critique — action immediateRisque eleve — planifier sous 48hRisque moyen — integrer au sprint

Les developpeurs francais face aux attaques supply chain : Paris, Lyon, Nantes

L'ecosysteme tech francais est particulierement expose aux attaques supply chain en raison de sa forte dependance a npm et PyPI. A Paris, ou se concentrent les startups fintech et les scale-ups SaaS, l'utilisation massive de microservices Node.js multiplie la surface d'attaque. Un audit que nous avons mene aupres d'une fintech parisienne de 45 developpeurs a revele 2 847 dependances transitives npm sur leur monorepo principal, dont 23 avaient des CVE connues de severite haute ou critique, et 4 packages etaient maintenus par un seul contributeur qui n'avait plus committe depuis plus de 18 mois.

A Lyon, le tissu d'ESN et d'editeurs de logiciels industriels utilise beaucoup Python pour l'IoT, le machine learning, et l'automatisation. L'ecosysteme PyPI est moins mature que npm en termes de securite supply chain : pas de provenance integree, pas d'equivalent natif a npm audit signatures, et une adoption encore faible de pip-audit. Les equipes lyonnaises que nous accompagnons decouvrent souvent avec stupeur que leurs projets Django embarquent des packages PyPI qui n'ont pas ete mis a jour depuis 3 ans et dont les mainteneurs sont injoignables.

A Nantes, la communaute tech tres active autour du web et de l'open source (Nantes Tech, DevFest Nantes) a cree un ecosysteme ou les developpeurs contribuent activement a des projets open source — mais ou la securite des dependances des projets consommes est rarement auditee. Lors d'un atelier que nous avons anime au DevFest Nantes 2026, sur 30 participants qui ont scanne leurs projets en live avec npm audit, 27 ont trouve au moins une vulnerabilite de severite haute. L'enjeu pour ces trois ecosystemes locaux est identique : passer d'une posture reactive (corriger quand l'attaque est publiee) a une posture proactive (auditer en continu avant que l'attaque ne frappe). L'affaire des projets Microsoft pirates et celle du ver Miasma l'ont montre : personne n'est a l'abri, meme les plus grands editeurs.

FAQ

Quels outils gratuits utiliser pour auditer ses dependances open source en 2026 ?

Les meilleurs outils gratuits et open source en 2026 sont : npm audit (integre a npm, zero configuration), pip-audit (Python Packaging Authority, equivalent pour PyPI), Trivy (Aqua Security, multi-ecosysteme couvrant npm, PyPI, Go, Rust, images Docker), Grype (Anchore, base de vulnerabilites tres reactive), et OSV-Scanner (Google, couvre la base OSV avec plus de 40 000 vulnerabilites). Pour la verification de provenance, utilisez npm audit signatures et slsa-verifier. Pour la surveillance continue, Dependabot (integre a GitHub) et Renovate (auto-heberge ou via Mend) sont tous deux gratuits pour les repositories open source. Combinez au moins deux outils de scan pour maximiser la couverture.

A quelle frequence faut-il auditer ses dependances npm et PyPI ?

La frequence minimale recommandee est une fois par semaine via un pipeline CI/CD automatise. Idealement, configurez un scan a chaque push et a chaque pull request avec npm audit ou pip-audit integre au pipeline. En complement, activez Dependabot ou Renovate pour des alertes en temps reel des qu'une nouvelle CVE impacte une de vos dependances. Les projets traitant des donnees sensibles (fintech, sante, e-commerce) doivent auditer quotidiennement. Apres un incident majeur dans l'ecosysteme (comme les 317 packages npm de mai 2026), lancez un audit exceptionnel immediat en croisant votre SBOM avec la liste des packages compromis.

Comment detecter si une dependance a ete compromise par une attaque supply chain ?

Plusieurs signaux d'alerte doivent attirer votre attention : un changement recent de mainteneur suivi d'une publication rapide (verifiez avec npm info <package> maintainers et npm info <package> time), la presence de scripts postinstall suspects qui telechargent et executent du code distant, des appels reseau inattendus dans le code source, une divergence entre le code sur GitHub et le code publie sur npm (verifiable via npm audit signatures et la verification de provenance SLSA), et une augmentation soudaine de la taille du package sans raison apparente. L'outil Socket.dev automatise la detection de ces signaux en analysant le comportement du code des packages.

Les lockfiles suffisent-ils a proteger contre les attaques supply chain ?

Non, les lockfiles sont necessaires mais insuffisants seuls. Le package-lock.json fixe les versions exactes et les hashes d'integrite SHA-512, ce qui protege contre les modifications silencieuses d'un package deja installe. Cependant, le lockfile ne protege pas contre un mainteneur compromis qui publie une nouvelle version malveillante que vous adoptez lors d'un npm update ou via une PR Dependabot. Il ne protege pas non plus contre le typosquatting lors de l'ajout d'une nouvelle dependance (npm install lod-ash au lieu de lodash). Une strategie complete combine lockfile + verification de provenance + pare-feu de dependances + monitoring continu — les 7 etapes de ce guide.

Securisez vos dependances open source maintenant

Audit SBOM complet, mise en place du pare-feu npm, configuration Dependabot/Renovate, formation equipe securite supply chain — nous vous accompagnons de A a Z.

Planifier un audit gratuit

Articles lies :

Sources : OpenSSF — Open Source Security Foundation, ANSSI — Agence nationale de la securite des systemes d'information