CVE-2026-80104، وهو خلل 9.8-severity في اجتياز المسارات والكتابة التعسفية إلى الملفات ضمن إطار تطبيقات الذكاء الاصطناعي DB-GPT، يذكر v0.8.1 بوصفه الإصدار الذي يصلحه. وهذا صحيح لكنه ناقص بشكل خطير: فـ v0.8.1 هو الإصدار الوحيد المطروح الذي يتضمن الإصلاح.
ما الذي تحققنا منه، وكيف
الحاجز هو دالة تُسمى _validate_upload_filename، أُضيفت في 21 مايو 2026، وتمنع بايتات null، والمسارات المطلقة في POSIX وWindows، وأي اسم ملف يحتوي على أكثر من مكوّن مساري واحد. قمنا بجلب ملف المصدر المعني عند الوسم v0.8.1 وعند الوسم v0.8.2 وقارنّا بينهما. في v0.8.1 تكون الدالة موجودة. أما في v0.8.2 — الذي صدر هذا الصباح — فهي غير موجودة، ويقرأ المعالج filename = file.filename مباشرة قبل ضمه إلى دليل الرفع وكتابة البايتات. لا تطبيع، ولا فحص احتواء.
كيف يختفي إصلاح
يعود فقدان هذا الحاجز إلى فرع ميزات قُطع قبل أن يهبط الإصلاح. وعندما جرى دمج ذلك الفرع في يونيو، استبدلت نسخته من الملف — التي تسبق 21 مايو — النسخة المصححة. لم يُتراجع عن شيء عمداً؛ بل جرى ببساطة استبدال الحاجز بنسخة أقدم من الدالة نفسها، ولهذا لا يسجل سجل التغييرات أي إدخال عنه.
ما الذي يخطئ فيه الإطار الشائع
يُقرأ حقل "الإصدار المصحح" في الاستشارة على نحو عالمي باعتباره "هذا الإصدار وكل ما بعده." هذا ما تفترضه أدوات الفحص، وما تتصرف عليه روبوتات الاعتماديات، وما يستنتجه المشغل. لكن هنا الحقل هو نقطة لا أرضية دنيا: ففريق يقرأ الاستشارة ويُجري الترقية إلى أحدث إصدار يفعل الشيء الخطأ تماماً ويصل إلى شيفرة ضعيفة وهو يعتقد أنه أصلحها. الاستشارة ليست خاطئة — بل تُقرأ بافتراض لا ينطبق.
التحقق يفاقم المشكلة
تعتمد طريق الرفع الوحيدة على دالة يُعلَّق على مصدرها "Mock User Info"، وتعيد كائن مستخدم يحمل role="admin" سواء أتمّ تزويد رأس المستخدم أم لا. كلا الفرعين admin. هذه هي الشيفرة الحالية في الإصدار المطروح، لا وسم مهجور — لذا يمكن الوصول إلى بدائية الكتابة إلى الملفات من دون مصادقة.
