Le rapport OSSRA 2026 de Synopsys, publie en avril, confirme ce que chaque developpeur constate empiriquement : 87 % des bases de code commerciales contiennent des dependances open source avec des vulnerabilites connues. Et ce chiffre ne couvre que les CVE — il ne dit rien des licences incompatibles, des projets abandonnes, ou des paquets dont la provenance n'a jamais ete verifiee.
Chez D-Open, chaque audit de projet que nous menons — que ce soit pour une startup parisienne, une ESN lyonnaise ou un editeur nantais — commence par la meme question : savez-vous exactement ce que contient votre arbre de dependances ? La reponse est presque toujours non. Ce guide formalise la methode que nous appliquons.
Etape 1 : Generer un inventaire complet (SBOM)
Un Software Bill of Materials (SBOM) est a votre logiciel ce qu'une liste d'ingredients est a un produit alimentaire. Sans cet inventaire, toute analyse en aval est partielle.
L'objectif de cette premiere etape est de produire un fichier structure listant chaque composant open source present dans votre projet, avec sa version exacte, sa licence declaree et son origine. Les deux formats standards sont SPDX (Linux Foundation) et CycloneDX (OWASP).
Pour un projet Node.js :
# Avec Syft (recommande, multi-ecosysteme)
syft dir:. -o spdx-json > sbom.spdx.json
# Avec npm natif (depuis npm 10)
npm sbom --sbom-format cyclonedx > sbom.cdx.json
# Avec CycloneDX CLI
cdxgen -o sbom.cdx.jsonPour un projet Python :
# Syft sur un requirements.txt ou un pyproject.toml
syft dir:. -o cyclonedx-json > sbom.cdx.json
# pip-audit genere un SBOM en passant
pip-audit --format=cyclonedx-json -o sbom.cdx.jsonLe piege le plus courant a cette etape est d'oublier les dependances non declarees. Un fichier JavaScript copie dans vendor/, un binding C compile localement, un module Go remplace par un fork prive — aucun de ces elements n'apparaitra dans un SBOM genere a partir du seul lockfile. Syft, en scannant le systeme de fichiers complet, en detecte une partie, mais pas tout. L'etape 2 complete cette detection.
Retour d'experience — Paris
« Sur un projet e-commerce que nous avons audite pour une startup du 11e arrondissement, le SBOM genere depuis le package-lock.json listait 847 dependances. Le scan Syft du repertoire complet en a trouve 912 — 65 composants non declares, dont un parser XML avec une CVE critique datant de 2023. »
Etape 2 : Cartographier l'arbre de dependances transitives
Votre package.json declare peut-etre 40 dependances. Votre node_modules/ en contient probablement 800. La difference, ce sont les dependances transitives — les dependances de vos dependances, recursives jusqu'a sept ou huit niveaux de profondeur.
Ce sont ces dependances profondes qui concentrent le risque. L'attaque supply chain sur 169 paquets TanStack de mai 2026 ciblait une dependance de troisieme niveau. L'incident Laravel Lang touchait des paquets que personne n'avait audites parce qu'ils etaient trop profonds dans l'arbre.
# Arbre npm complet (attention : la sortie est volumineuse)
npm ls --all > dependency-tree.txt
# Arbre Python
pipdeptree --warn silence > dependency-tree.txt
# Arbre Go
go mod graph | head -200Ce que vous cherchez dans cet arbre :
- Les dependances dupliquees a des versions differentes — signe d'un conflit latent.
- Les dependances profondes avec peu de mainteneurs — le maillon faible classique.
- Les dependances fantomes — presentes dans
node_modules/mais absentes du lockfile (installation manuelle oubliee).
Etape 3 : Analyser les licences et detecter les incompatibilites
La conformite juridique est le parent pauvre de la plupart des audits techniques. Pourtant, utiliser une dependance GPL dans un produit distribue sous licence MIT cree une obligation juridique que l'ignorance ne suspend pas.
L'outil de reference est license-checker pour npm, ou pip-licenses pour Python. Les deux produisent un rapport lisible qui classe chaque dependance par type de licence.
# npm
npx license-checker --summary --production
# Python
pip-licenses --format=table --with-urls --order=license
# Multi-ecosysteme avec Scancode
scancode -l --json-pp licenses.json .Ce que vous cherchez a cette etape :
- Les licences copyleft fort (GPL, AGPL) dans un projet distribue sous licence permissive.
- Les licences inconnues ou personnalisees — un paquet sans licence explicite est juridiquement un risque maximal (copyright complet par defaut).
- Les licences multiples — certains paquets offrent un choix (MIT OR Apache-2.0). Documentez lequel vous choisissez.
- Les licences incompatibles entre elles dans votre arbre — une dependance Apache 2.0 qui tire une sous-dependance GPLv2 pose un probleme que ni l'une ni l'autre n'a cree seule.
Pour les equipes que nous accompagnons a Lyon et Toulouse, la decouverte la plus frequente a cette etape est la presence de paquets sans licence declaree. Sur un audit recent d'un projet SaaS toulousain, 14 dependances transitives n'avaient aucun champ license dans leur package.json. Chacune represente un risque juridique non quantifie, comme le detaille notre guide complet sur les licences open source.
Etape 4 : Scanner les vulnerabilites connues (CVE)
C'est l'etape la plus connue, et paradoxalement la plus mal executee. La plupart des equipes lancent un npm audit de temps en temps, lisent les resultats en diagonale, et concluent que tout va bien parce que les CVE sont classees « moderate ».
Le probleme est triple. Premierement, npm audit ne couvre que les CVE publiees dans la GitHub Advisory Database — pas celles d'OSV, NVD ou des bases communautaires. Deuxiemement, la classification de severite est celle du paquet amont, pas la votre : une CVE « moderate » dans un parser XML devient critique si votre application traite du XML non fiable. Troisiemement, les faux positifs frequents creent une fatigue d'alerte qui masque les vrais problemes.
# Multi-source (recommande)
trivy fs --scanners vuln --severity HIGH,CRITICAL .
# npm avec OSV (plus complet que npm audit)
osv-scanner --lockfile=package-lock.json
# Python
pip-audit --desc --fix --dry-run
# Docker images
trivy image --severity HIGH,CRITICAL monapp:latestNotre recommandation : utilisez au moins deux scanners avec des bases de donnees differentes. Trivy (Aqua Security) couvre NVD, GitHub Advisories, Red Hat et plusieurs bases vendor. osv-scanner (Google) couvre OSV, qui agrege des sources que Trivy ne couvre pas toujours. La combinaison des deux offre la meilleure couverture que nous ayons observee en pratique. Les equipes parisiennes qui suivent le cadre CISA publie en aout 2026 retrouveront ici la meme recommandation de defense en profondeur.
| Outil | Ecosystemes | Bases de donnees | Licence | CI/CD natif |
|---|---|---|---|---|
| Trivy | npm, pip, Go, Rust, Java, Ruby, PHP | NVD, GitHub, Red Hat, Ubuntu, Debian | Apache 2.0 | GitHub Actions, GitLab CI |
| osv-scanner | npm, pip, Go, Rust, Java, Ruby | OSV (agrege 15+ sources) | Apache 2.0 | GitHub Actions |
| npm audit | npm uniquement | GitHub Advisory Database | Inclus dans npm | Oui (npm ci --audit) |
| pip-audit | pip uniquement | PyPI Advisory + OSV | Apache 2.0 | GitHub Actions |
| Grype | npm, pip, Go, Rust, Java, Ruby | NVD, GitHub, base Anchore | Apache 2.0 | GitHub Actions, GitLab CI |
Etape 5 : Evaluer la sante et la maintenance des projets amont
Une dependance peut n'avoir aucune CVE connue et pourtant representer un risque majeur. Si le mainteneur unique a disparu depuis 18 mois, si le dernier commit date de 2023, si les issues critiques s'accumulent sans reponse — le probleme n'est pas technique, il est organisationnel.
Les signaux a verifier pour chaque dependance critique (celles dans votre chemin de production) :
- Date du dernier commit et de la derniere release. Plus de 12 mois sans activite sur un projet actif est un signal d'alerte.
- Nombre de mainteneurs actifs. Un seul mainteneur est un single point of failure. L'incident simple-git CVE-2026-6951 a touche un paquet maintenu par une seule personne.
- Ratio issues ouvertes / fermees. Un ratio qui augmente indique un projet qui se noie.
- Presence d'un SECURITY.md. Un projet sans politique de divulgation de vulnerabilites est un projet qui ne traitera pas les rapports de securite correctement.
- Transferts de propriete recents. Un paquet npm dont le mainteneur a change recemment est un vecteur d'attaque supply chain classique, comme le montrent les incidents Phantom Gyp de juin 2026.
Les outils Socket.dev et deps.dev (Google) automatisent une partie de cette verification. Pour un audit approfondi, nous utilisons aussi OpenSSF Scorecard, qui attribue un score composite a chaque repository GitHub.
Retour d'experience — Nantes
« Un editeur SaaS nantais que nous avons audite en juillet dependait d'un middleware Express maintenu par un unique contributeur allemand. Aucune CVE, aucun signal technique negatif. Mais le mainteneur n'avait plus fait de commit depuis mars 2025 et les 4 issues de securite ouvertes etaient sans reponse. Nous avons remplace le middleware en 3 heures. Deux semaines plus tard, un transfert de propriete npm suspect a ete detecte sur ce meme paquet. »
Vos dependances vous exposent sans que vous le sachiez ?
Nous realisons des audits complets de dependances pour les equipes francaises — inventaire, licences, vulnerabilites, sante des projets amont. Un rapport actionnable en 5 jours ouvrables.
Demander un auditEtape 6 : Verifier la provenance et l'integrite des paquets
Cette etape est la plus negligee et pourtant la plus critique dans le contexte actuel des attaques supply chain. En 2026, le rapport FIRST prevoit 66 000 CVE, et une part croissante provient de paquets malveillants publies sous des noms legitimes.
La question n'est plus seulement « cette dependance a-t-elle des vulnerabilites ? » mais « cette dependance est-elle bien celle que vous croyez avoir installee ? »
Les verifications essentielles :
- Integrite du lockfile. Votre
package-lock.jsonouyarn.lockcontient les hashes SHA-512 de chaque paquet. Verifiez qu'il n'a pas ete modifie manuellement :npm ci(au lieu denpm install) echoue si les hashes ne correspondent pas. - Attestations de provenance npm. Depuis npm 10, les paquets peuvent etre publies avec des attestations Sigstore qui lient le paquet publie au commit source exact. Verifiez :
npm audit signatures. - Comparaison source / distribue. Pour les dependances critiques, comparez le code publie sur npm avec le code source sur GitHub. Des outils comme diffoscope automatisent cette comparaison.
# Verifier les signatures npm
npm audit signatures
# Verifier l'integrite via le lockfile
npm ci --ignore-scripts # echoue si les hashes different
# Scanner les comportements suspects (Socket.dev CLI)
socket scan create --repo . --reportEtape 7 : Automatiser la remediation et la surveillance continue
Un audit ponctuel est utile. Un audit ponctuel sans suivi est un gaspillage. Les dependances evoluent chaque jour : nouvelles versions, nouvelles CVE, nouveaux transferts de propriete. Votre audit du lundi est obsolete le vendredi.
La derniere etape transforme les 6 precedentes en processus continu :
Dans votre pipeline CI/CD :
- Ajoutez
trivy fsetosv-scannercomme etapes du pipeline. Faites echouer le build sur les CVE HIGH/CRITICAL. - Ajoutez
license-checkeravec une liste blanche de licences acceptees. Faites echouer le build si une licence non approuvee apparait. - Generez un SBOM a chaque release et archivez-le avec l'artefact de build.
En surveillance continue :
- Configurez Dependabot ou Renovate pour les mises a jour automatiques. Nous detaillons la configuration optimale dans notre guide dedie.
- Activez les alertes Socket.dev pour detecter les comportements suspects en temps reel (obfuscation, appels reseau, acces filesystem).
- Planifiez un audit complet (les 7 etapes) chaque trimestre.
Retour d'experience — Toulouse
« Un editeur SaaS toulousain que nous avons accompagne a integre ce pipeline en 4 jours. En trois mois, il a detecte et corrige 23 vulnerabilites critiques, remplace 6 dependances sans mainteneur actif, et identifie 3 incompatibilites de licence qu'il ignorait. Le cout de mise en place : 2 jours/homme de configuration CI/CD. Le cout evite : incalculable, mais le premier paquet suspect detecte par Socket.dev avait ete installe 48 heures avant notre intervention. »
Questions frequentes
Quelle est la difference entre un audit de dependances et un scan de vulnerabilites ?+
Un scan de vulnerabilites (npm audit, pip-audit, Trivy) ne couvre qu'un seul aspect : les CVE connues. Un audit de dependances complet inclut en plus l'inventaire exhaustif (SBOM), l'analyse de licences, l'evaluation de la sante des projets amont, la detection de dependances fantomes non declarees, et la verification des signatures et de la provenance des paquets. Le scan est une etape de l'audit, pas l'audit lui-meme.
A quelle frequence faut-il auditer ses dependances open source ?+
L'audit complet (les 7 etapes) devrait etre execute au minimum une fois par trimestre pour un projet en production active. En complement, le scan de vulnerabilites (etape 4) doit tourner a chaque build dans votre pipeline CI/CD. Et la surveillance des signaux de sante (etape 5) devrait etre continue, via des outils comme Socket.dev ou Snyk qui alertent en temps reel sur les changements de mainteneur ou les publications suspectes.
Quels outils open source utiliser pour generer un SBOM ?+
Les trois outils de reference sont Syft (d'Anchore) pour la generation multi-ecosysteme, CycloneDX CLI pour le format OWASP, et SPDX Tools pour le format Linux Foundation. Syft est le plus polyvalent : il genere des SBOM au format SPDX et CycloneDX a partir de lockfiles, d'images Docker ou de systemes de fichiers. Pour un projet npm, npm sbom (disponible depuis npm 10) est aussi une option native.
Comment gerer les dependances avec des licences incompatibles ?+
La premiere etape est de classifier les licences en trois categories : permissives (MIT, Apache 2.0, BSD), copyleft faible (LGPL, MPL) et copyleft fort (GPL, AGPL). Si votre projet est distribue sous licence permissive, les dependances GPL creent une incompatibilite. Les options sont : remplacer la dependance par une alternative sous licence compatible, isoler le composant dans un processus separe (pour GPL, pas AGPL), ou relicencier votre propre code. La decision depend du mode de distribution de votre logiciel.
Vous ne savez pas ce que contient votre arbre de dependances ?
Nous auditons les dependances open source des equipes francaises — de l'inventaire SBOM a la remediation automatisee. Un rapport actionnable, pas un PDF de 200 pages.
Demander un audit