يمكن لإصدارات FastAPI 0.140.0-0.141.1 أن تكشف عن القيم الخام المغلفة بواسطة فئات Secret الخاصة بـ Pydantic عندما يعيد المسار (route) قاموساً (dictionary) أو قائمة (list) بسيطة دون نموذج استجابة (response model). يمكن أن يؤدي هذا التسريب إلى كشف كلمات المرور، أو مفاتيح API، أو أي بيانات اعتماد أخرى حاول المطور إخفاءها.

لماذا تكمن أهمية هذه الثغرة

يقوم FastAPI ببناء استجابات JSON عن طريق فحص نوع القيمة التي تعيدها دالة العرض (view function). إذا قمت بتوفير نموذج استجابة (response model)، فإن FastAPI يسلم الكائن إلى Pydantic، الذي يقوم بدوره بإخفاء SecretStr كـ "**********". في الإصدارات المتأثرة، يتعرف الإطار فقط على نوع SecretStr المدمج. عندما تقوم بإنشاء فئة فرعية من Secret (أو تستخدم نوع سر مخصص) وتعيد الكائن داخل قاموس أو قائمة خام، يلجأ FastAPI إلى عملية تحويل عامة من كائن إلى قاموس (object-to-dict conversion). تصل عملية التحويل هذه إلى الخاصية الخاصة (private attribute) التي تحتوي على قيمة السر الفعلية وترسلها إلى العميل دون تغيير.

يحدث التسريب فقط عند استيفاء الشروط الثلاثة التالية:

  • أن يكون نوع السر فئة فرعية من الفئة الأساسية Secret الخاصة بـ Pydantic.
  • ألا يقوم المسار (route) بتحديد نموذج استجابة (response model).
  • أن تعيد دالة العرض السر داخل dict أو list بسيط.

كيف تحمي أسرارك اليوم

  • قم بتحديد نموذج استجابة (response model) لكل نقطة نهاية (endpoint) قد تعيد بيانات تحتوي على أسرار. سيسمح FastAPI بعد ذلك لـ Pydantic بمعالجة التسلسل (serialization)، مما يؤدي إلى إخفاء القيم بشكل صحيح.
  • قم بتغليف الأسرار داخل حقل BaseModel في Pydantic بدلاً من إعادة الحاويات الخام. يمكن أن يكون نوع حقل النموذج فئة سر معترف بها، مما يضمن المعالجة الصحيحة.
  • قم بتسجيل مشفر JSON مخصص (custom JSON encoder) للفئة الفرعية للسر الخاص بك إذا كنت مضطراً للاحتفاظ بأسلوب الإرجاع الحالي. يمكن للمشفر أن يعيد التمثيل المخفي ("**********").

الخطورة واستجابة المجتمع

تعتبر هذه المشكلة منخفضة الخطورة. فهي تتطلب إعداداً معيناً لتفعيلها، ولكن أي تعرض عرضي لبيانات الاعتماد يمثل خطراً، خاصة في واجهات برمجة التطبيقات العامة أو الخدمات التي تسجل الاستجابات (logs).

الخلاصة: إن إغفال نموذج الاستجابة يمكن أن يحول غلاف السر (secret wrapper) الذي صُمم بنية حسنة إلى تسريب للبيانات. يعد إضافة نماذج استجابة صريحة أو مشفرات مخصصة وسيلة رخيصة وموثوقة لإبقاء بيانات الاعتماد مخفية حتى يصدر FastAPI إصلاحاً مدمجاً.