Sprint 1 — DevSecOps & Security Scanning
Trivy, Semgrep, secrets scanning. Les CVEs explosent. Et on doit les fixer. 😰
INC-004 — CVEs en cascade depuis une dépendance inutilisée
Contexte : Trivy filesystem scan
Symptôme :
17 HIGH CVEs détectés dans la pipeline
Cause :
http-tools → mitmproxy (outil de debug réseau)
jamais utilisé par FastAPI mais dans requirements.in
Génère une cascade de 12 CVEs HIGH via ses dépendances
Fix :
# Supprimer http-tools de requirements.in
# pip-compile → requirements.txt regeneré
# 12/17 CVEs éliminés automatiquement
Leçon :
Auditer régulièrement les dépendances
Principle of Least Dependency : n'installer que le nécessaire
Commande utile : pip-audit, pip list --outdated
INC-005 — python-jose CVE CRITICAL (CVE-2024-33663)
Contexte : Trivy scan — algorithme JWT
Symptôme :
CRITICAL: python-jose algorithm confusion with ECDSA keys
Cause :
python-jose 3.x vulnérable à l'algorithm confusion
Aucun patch disponible — projet peu maintenu
Fix :
# Migration python-jose → PyJWT
# requirements.in : python-jose → PyJWT>=2.12.0
# app/oauth2.py : from jose import JWTError → from jwt.exceptions import InvalidTokenError
Leçon :
Vérifier la santé des projets open source avant de les utiliser
Critères : dernière release, issues ouvertes, mainteneurs actifs
Outils : deps.dev, snyk advisor, PyPI stats
INC-006 — passlib incompatible bcrypt >= 4.0
Contexte : Tests pytest + pipeline CI
Symptôme :
AttributeError: module 'bcrypt' has no attribute '__about__'
ValueError: password cannot be longer than 72 bytes
Cause :
passlib 1.7.4 accède à bcrypt.__about__.__version__
Supprimé dans bcrypt 4.0.0
passlib abandonné depuis 2023 — incompatible
Fix :
# Migration passlib → bcrypt direct
# requirements.in : supprimer passlib, garder bcrypt (sans restriction <4)
# app/utils.py : utiliser bcrypt.hashpw() / bcrypt.checkpw() directement
Leçon :
Surveiller l'activité des dépendances critiques (auth, crypto)
Un projet abandonné = risque de sécurité + incompatibilités futures
Outils : Dependabot, Renovate pour les alertes automatiques
INC-007 — CVEs OS image de base Docker (python:3.10-slim)
Contexte : Trivy image scan (après build)
Symptôme :
14 CVEs OS Debian 13.4 — status "affected" (pas de fix)
wheel et jaraco.context : Trivy détecte 2 versions
Cause :
python:3.10-slim installe wheel/jaraco.context via apt
dans /usr/lib/python3/dist-packages/ (version ancienne)
pip installe une version plus récente dans /usr/local/lib/
Trivy remonte les 2 versions → CVEs sur l'ancienne
Fix court terme :
Ajouter les CVEs dans .trivyignore avec justification
→ packages de build jamais utilisés à runtime par FastAPI
Fix long terme :
# Multi-stage build (Sprint 4)
FROM python:3.12-slim AS builder
# installer toutes les dépendances
FROM python:3.12-slim AS runtime
# copier uniquement /usr/local/lib/python3.12
# → élimine tous les packages système de build
Leçon :
Les images Docker héritent des vulnérabilités de l'OS de base
Multi-stage build = meilleure pratique pour réduire la surface d'attaque
Alternatives : distroless, chainguard images
📊 Résumé Sprint 1
- 4 incidents : Dépendances inutilisées, projects abandonnés, CVEs OS
- Clé : Auditer dépendances + évaluer la santé des projets open source
- Impact : Montrer que tu sais sécuriser une pipeline DevSecOps