Aller au contenu

Scan de dépendances

Détecter les CVE dans vos dépendances avant qu'elles ne deviennent un incident de sécurité.


C'est quoi une CVE ?

Une CVE (Common Vulnerabilities and Exposures) est un identifiant unique attribue a une faille de sécurité connue, au format CVE-YYYY-NNNNN.

Deux bases de données principales recensent ces failles :

  • NVD (National Vulnerability Database) — maintenue par le NIST (USA)
  • OSV (Open Source Vulnerabilities) — maintenue par Google, orientée open source

Score CVSS

Chaque CVE reçoit un score CVSS (Common Vulnerability Scoring System) qui mesure sa gravite :

Score CVSS Sévérité Exemple
9.0 - 10.0 Critical Exécution de code à distance sans authentification
7.0 - 8.9 High Elevation de privileges
4.0 - 6.9 Medium Fuite d'information limitee
0.1 - 3.9 Low Denial of service local

Cycle de vie d'une vulnérabilité

graph LR
    A["Découverte"] --> B["Attribution CVE"] --> C["Publication"] --> D["Patch"] --> E["Adoption"]
  1. Découverte — un chercheur ou un attaquant identifie la faille
  2. Attribution CVE — le MITRE attribue un identifiant unique
  3. Publication — la faille est rendue publique avec ses détails
  4. Patch — le mainteneur publie un correctif
  5. Adoption — les utilisateurs mettent à jour leurs dépendances

La fenêtre d'exposition

Entre la publication et l'adoption, votre application est vulnerable. Le scan automatise réduit cette fenêtre au minimum.


Pourquoi scanner

Vos dépendances, c'est du code que vous n'avez pas écrit mais dont vous etes responsable. Un projet Python ou JavaScript typique embarque des centaines de paquets transitifs — autant de surfaces d'attaque potentielles.

Exemples marquants

  • Log4Shell (CVE-2021-44228, CVSS 10.0) — une simple chaîne de caractères dans un log permettait l'exécution de code à distance. Des milliers d'applications Java impactees en quelques heures.
  • event-stream (npm, 2018) — un mainteneur malveillant a injecte du code visant les portefeuilles de cryptomonnaies via une dépendance transitive. Supply chain attack classique.

Vos dépendances sont votre responsabilité

Même si vous n'avez pas écrit le code vulnerable, c'est votre application qui sera compromise. Scanner régulièrement est une obligation, pas une option.


Python — pip-audit

Installation

pip install pip-audit

Utilisation de base

pip-audit

pip-audit interroge la base OSV (Google) et compare les versions installees dans votre environnement avec les vulnérabilités connues.

Mode offline (airgap)

Pour les environnements deconnectes d'Internet :

  1. Sur une machine connectee, télécharger le cache :

    pip-audit --cache-dir ./pip-audit-cache --dry-run
    
  2. Transferer le dossier pip-audit-cache vers la machine cible

  3. Scanner en mode offline :

    pip-audit --cache-dir ./pip-audit-cache
    

Lecture du rapport

Le rapport affiche quatre colonnes essentielles :

Colonne Description
Name Nom du paquet vulnerable
Version Version installee
ID Identifiant CVE ou PYSEC
Fix Version corrigee disponible

Remédiation

pip install --upgrade package==fixed_version

Remplacez package par le nom du paquet et fixed_version par la version corrigee indiquee dans le rapport.

Exemple de rapport
Found 3 known vulnerabilities in 2 packages

Name       Version  ID                  Fix Versions
---------- -------- ------------------- ------------
requests   2.25.1   PYSEC-2023-74       2.31.0
urllib3    1.26.5   PYSEC-2023-212      1.26.18
urllib3    1.26.5   CVE-2023-45803      1.26.18

Pour corriger :

pip install --upgrade requests==2.31.0 urllib3==1.26.18

JavaScript — npm audit

Utilisation de base

npm audit est intégré directement dans npm — aucune installation supplémentaire nécessaire.

npm audit

Lecture du rapport

Le rapport affiche pour chaque vulnérabilité :

  • Severity — low, moderate, high, critical
  • Package — le paquet concerne
  • Patched in — la version corrigee
  • Dependency of — quel paquet de premier niveau tire cette dépendance
  • Path — la chaîne de dépendances complète

Correction automatique

# Correction conservative (ne casse pas les versions majeures)
npm audit fix

# Correction forcee (peut mettre a jour des versions majeures)
npm audit fix --force

Attention a --force

npm audit fix --force peut introduire des breaking changes en mettant à jour des dépendances vers une version majeure supérieure. Toujours vérifier que l'application fonctionne après un fix force.

Airgap : npm audit nécessité un registre

npm audit interroge le registre npm pour obtenir les données de vulnérabilité. En environnement déconnecté, utilisez un registre prive comme Verdaccio qui peut être synchronisé manuellement, ou preferez Trivy en mode offline.


Trivy filesystem — alternative unifiee

Trivy (Aqua Security) est un scanner unique capable d'analyser les dépendances de multiples langages : Python, JavaScript, Go, Java, Ruby, Rust, etc.

Préparation offline

Sur une machine connectee, télécharger la base de vulnérabilités :

trivy --download-db-only

Transferer le dossier de cache (par défaut ~/.cache/trivy/) vers la machine cible.

Scan

trivy filesystem --skip-db-download --severity HIGH,CRITICAL .
  • --skip-db-download — utilise la base locale, pas de connexion requise
  • --severity HIGH,CRITICAL — filtre les résultats pour se concentrer sur les failles graves
  • . — scanne le répertoire courant

Comparaison avec les outils natifs

Trivy détecté souvent les mêmes CVE que pip-audit ou npm audit, mais offre l'avantage d'un outil unique pour tous les langages d'un projet polyglotte. Comparez les résultats pour vous assurer qu'aucune faille n'echappe a un seul outil.


Tableau comparatif

pip-audit npm audit Trivy filesystem
Langages Python JavaScript Multi-langage
Airgap Oui (cache) Partiel (Verdaccio) Oui (DB offline)
Format sortie Table, JSON Table, JSON Table, JSON, SARIF
Intégration CI Script Script Script + plugins

Points clés

À retenir

  • Scannez vos dépendances à chaque build, pas seulement à la release
  • Combinez un outil natif (pip-audit, npm audit) avec Trivy pour une couverture maximale
  • En environnement airgap, preparez les bases de données sur une machine connectee
  • Traitez les vulnérabilités Critical et High en priorité