Skip to content

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

Voir Sprint 2