Se rendre au contenu

Starlette 0.40

patch de sécurité critique CVE-2024-47874
15 octobre 2024 par
Starlette 0.40
Makersquad

Date de sortie : 15 octobre 2024

Documentation officielle : https://www.starlette.io

Starlette est le framework ASGI minimaliste qui sert de fondation à FastAPI. Lightweight par design, il gère les primitives HTTP, WebSocket, routing et middlewares pour Python async. Si ton application expose des endpoints d’upload de fichiers via FastAPI ou Starlette directement, cette release te concerne directement.

Cette version est une security release. Elle doit être appliquée sans attendre sur tous les environnements exposés à Internet.


Les nouveautés principales

Vulnérabilité DoS via multipart/form-data — CVE-2024-47874

Le parseur multipart/form-data de Starlette ne limitait pas la taille des champs individuels d’un formulaire. Un attaquant pouvait envoyer une requête multipart avec des champs de taille arbitraire, provoquant une consommation mémoire incontrôlée et potentiellement un crash du processus (OOM — Out of Memory).

  • CVE : CVE-2024-47874
  • GHSA : GHSA-f96h-pmfr-66vw
  • Sévérité : HIGH — CVSS 8.7
  • Vecteur : requête HTTP non authentifiée, exploitation triviale

Nouveau paramètre max_part_size

Le correctif introduit un paramètre max_part_size sur request.form(), avec une valeur par défaut de 1 MB par champ. C’est un changement de comportement : si ton application reçoit des champs de formulaire supérieurs à 1 MB (rare mais possible pour des payloads encodés en base64 par exemple), tu devras ajuster la limite explicitement.

async def upload(request: Request):
    # Limite par défaut: 1 MB par champ
    form = await request.form()

    # Limite personnalisée pour les gros uploads
    form = await request.form(max_part_size=10 * 1024 * 1024)  # 10 MB

Note : cette limite s’applique à chaque champ du formulaire, pas à la taille totale de la requête. Pour les fichiers volumineux, tu continues à gérer ça via la config de ton serveur ASGI (uvicorn, hypercorn…) ou un reverse proxy.


Mise à jour python-multipart vers 0.0.7

La dépendance python-multipart est mise à jour vers la version 0.0.7, qui contient elle-même des correctifs de sécurité complémentaires. Si tu as cette bibliothèque en dépendance directe dans ton projet, pense à aligner ta contrainte de version.


typing-extensions rendu optionnel

typing-extensions n’est plus une dépendance obligatoire de Starlette. Elle reste utilisée sur les versions Python qui en ont besoin, mais elle n’est plus installée systématiquement. Cela allège légèrement le graphe de dépendances pour les projets Python 3.11+.


Support officiel Python 3.12

Starlette 0.40 officialise le support de Python 3.12 dans sa matrice de compatibilité.


Échanger avec un expert FastAPI

Nous revenons vers vous sous 24h.


Chez Makersquad, nous concevons des API performantes et évolutives avec FastAPI, un framework reconnu pour sa rapidité, son typage natif et sa documentation automatique basée sur OpenAPI. Que ce soit pour des microservices ou des projets orientés data et IA, FastAPI permet de développer des services robustes tout en garantissant un excellent niveau de performance. Que vous lanciez un nouveau projet ou souhaitiez moderniser votre backend, notre équipe vous accompagne pour construire des API rapides, fiables et prêtes à scaler.


À retenir

Ne laisse pas traîner cette mise à jour. La CVE-2024-47874 est exploitable sans authentification sur n’importe quel endpoint qui parse du multipart/form-data — ce qui inclut tous les formulaires d’upload FastAPI. La correction se fait en une ligne de pip install --upgrade starlette. Vérifie ensuite que tes éventuelles limites max_part_size personnalisées sont cohérentes avec les besoins de ton application.

Starlette 0.38
support memoryview et compatibilité Python 3.13