Exercice 03 : Auditer les dépendances avec npm audit et pip audit
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Lancer
npm auditsur un projet Node.js et interpréter les résultats - ✅ Utiliser
npm audit fixpour corriger les vulnérabilités automatiquement - ✅ Lancer
pip auditsur un projet Python - ✅ Distinguer les vulnérabilités corrigeables des breaking changes
- ✅ Comprendre pourquoi mettre à jour les dépendances régulièrement
Durée estimée : 20 minutes
Difficulté : ⭐☆☆☆☆ (Débutant)
Prérequis : Node.js (npm) OU Python (pip) installé
📖 Contexte
85 % des applications web utilisent au moins un package open-source vulnérable. Les attaquants exploitent des CVE (vulnérabilités publiques) dans les dépendances pour compromettre les applications. Les gestionnaires de paquets incluent des outils d'audit intégrés pour détecter ces problèmes.
Log4Shell (2021) est l'exemple le plus connu : une vulnérabilité CVSS 10/10 dans une bibliothèque Java utilisée par des millions d'applications. Elle a été corrigée en 24h, mais des milliers d'applications non mises à jour ont été compromises pendant des semaines.
📋 Énoncé
Auditez un projet avec des dépendances vulnérables intentionnelles et appliquez les correctifs.
🧭 Déroulement de l'exercice
Partie A : npm audit (Node.js)
Tâche 1 : Créer un projet avec des dépendances vulnérables
mkdir demo-audit-node && cd demo-audit-node
npm init -yInstallez des versions anciennement vulnérables pour la démonstration :
# Ces versions ont des CVE documentées (exercice pédagogique)
npm install express@4.17.1 lodash@4.17.4 axios@0.21.0Note : Ces versions contiennent de vraies CVE historiques utilisées uniquement à des fins d'apprentissage.
Vérification : ls node_modules | head -5 liste les dépendances installées.
Tâche 2 : Lancer l'audit
npm auditObservez la sortie : chaque vulnérabilité affiche le nom du package, la sévérité (low/moderate/high/critical), la description et si un correctif est disponible.
# Pour un rapport JSON exploitable
npm audit --json > audit-report.json
cat audit-report.json | python3 -c "import json,sys; data=json.load(sys.stdin); print(f'Total: {data[\"metadata\"][\"vulnerabilities\"]}')"Indice : La sortie de
npm auditaffiche un résumé commeX vulnerabilities (Y moderate, Z high). La colonne "fix available" indique sinpm audit fixpeut corriger automatiquement.
Vérification : npm audit doit trouver des vulnérabilités dans les packages installés.
Tâche 3 : Appliquer les correctifs
# Corriger les vulnérabilités sans breaking changes
npm audit fix
# Vérifier ce qui a changé
npm audit
# Si des vulnérabilités critiques restent (avec breaking changes potentiels)
npm audit fix --force # ⚠️ À utiliser avec précaution - peut casser l'APIIndice :
npm audit fixmet à jour vers la version la plus récente compatible avec votresemver(ex:^4.17.1→^4.18.x).--forcepeut monter vers une version majeure, ce qui peut briser votre code. Toujours tester après un--force.
Vérification : npm audit après le fix doit afficher moins (ou zéro) de vulnérabilités.
Partie B : pip audit (Python)
Tâche 4 : Installer pip-audit
# pip-audit est l'outil officiel de la Python Packaging Authority (PyPA)
pip install pip-audit
# Ou avec pipx pour l'isolation
pipx install pip-auditVérification : pip-audit --version affiche la version.
Tâche 5 : Créer et auditer un projet Python
mkdir demo-audit-python && cd demo-audit-python
# requirements.txt avec versions volontairement anciennes
cat > requirements.txt << 'EOF'
requests==2.20.0
flask==1.0.0
jinja2==2.10.0
EOF
# Installer dans un environnement virtuel
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Lancer l'audit
pip-auditIndice :
pip-auditcompare vos dépendances installées avec la base OSV (Open Source Vulnerabilities) de Google. Il affiche le package, la version installée, la version corrigée et l'identifiant CVE.
Vérification : pip-audit doit trouver des CVE dans les packages old-school installés.
Tâche 6 : Corriger et générer un rapport
# Générer un rapport JSON
pip-audit --format json --output audit-python.json
# Voir les correctifs disponibles
pip-audit --fix # ⚠️ Modifie l'environnement directement
# Pour voir sans appliquer (dry-run)
pip-audit --fix --dry-runVérification : pip-audit --fix --dry-run liste les mises à jour qui seraient appliquées.
✅ Vérification du résultat
npm audittrouve des vulnérabilités dans le projet Node.jsnpm audit fixréduit le nombre de vulnérabilitéspip-audits'installe et scanne le projet Python- Les deux outils produisent un rapport JSON
💡 À retenir
| Outil | Écosystème | Commande d'audit | Commande de fix |
|---|---|---|---|
| npm audit | Node.js / npm | npm audit | npm audit fix |
| pip-audit | Python / pip | pip-audit | pip-audit --fix |
| cargo audit | Rust / Cargo | cargo audit | cargo update |
| trivy fs | Tous | trivy fs . | Manuel |
L'audit des dépendances devrait être lancé dans chaque pipeline CI/CD. Si une CVE critique est trouvée, le build est bloqué jusqu'à correction.
✨ Solution Complète
# Node.js
mkdir demo-audit && cd demo-audit
npm init -y && npm install express@4.17.1 lodash@4.17.4
npm audit
npm audit fix
npm audit # Vérifier
# Python
pip install pip-audit
pip-audit # Sur l'environnement actuel
pip-audit --format json --output rapport.json