FastAPI 0.140.0-0.141.1 می‌توانند مقادیر خام پوشانده شده توسط کلاس‌های Secret در Pydantic را فاش کنند، زمانی که یک مسیر (route) بدون داشتن یک response model، یک دیکشنری یا لیست ساده برمی‌گرداند. این نشت می‌تواند رمز عبورها، کلیدهای API یا هر اعتبار دیگری را که توسعه‌دهنده سعی در پنهان کردن آن داشته، آشکار کند.

چرا این باگ اهمیت دارد

FastAPI پاسخ‌های JSON را با بررسی نوع بازگشتیِ تابع view می‌سازد. اگر یک response model ارائه دهید، FastAPI شیء را به Pydantic می‌سپارد که SecretStr را به صورت "**********" ماسک می‌کند. در نسخه‌های آسیب‌پذیر، این فریم‌ورک فقط نوع داخلی SecretStr را می‌شناسد. زمانی که شما از Secret زیرکلاس می‌سازید (یا از یک نوع secret سفارشی استفاده می‌کنید) و شیء را درون یک dict یا list خام برمی‌گردانید، FastAPI به یک تبدیل عمومیِ object-to-dict متوسل می‌شود. این تبدیل به ویژگی (attribute) خصوصی که مقدار واقعی secret را نگه می‌دارد دسترسی پیدا کرده و آن را بدون تغییر به کلاینت ارسال می‌کند.

این نشت تنها زمانی رخ می‌دهد که هر سه شرط زیر برقرار باشند:

  • نوع secret، زیرکلاسی از کلاس پایه Secret در Pydantic باشد.
  • مسیر (route) یک response model تعریف نکرده باشد.
  • تابع view، مقدار secret را درون یک dict یا list ساده برگرداند.

چگونه همین امروز از اطلاعات حساس خود محافظت کنید

  • یک response model تعریف کنید برای هر اندپوینت (endpoint) که ممکن است داده‌های حاوی اطلاعات حساس را برگرداند. در این صورت FastAPI اجازه می‌دهد Pydantic فرآیند سریال‌سازی (serialization) را انجام دهد که مقادیر را به درستی ماسک می‌کند.
  • به جای بازگرداندن کانتینرهای خام، اطلاعات حساس را درون یک فیلد از BaseModel در Pydantic قرار دهید. نوع فیلد مدل می‌تواند یک کلاس secret شناخته‌شده باشد تا از مدیریت صحیح آن اطمینان حاصل شود.
  • یک JSON encoder سفارشی ثبت کنید برای زیرکلاس secret خود، اگر مجبور هستید سبک بازگشتی فعلی را حفظ کنید. این انکودر می‌تواند نمایش ماسک‌شده ("**********") را برگرداند.

شدت آسیب‌پذیری و واکنش جامعه

شدت این مشکل پایین است. برای فعال شدن به تنظیمات خاصی نیاز دارد، اما هرگونه افشای تصادفی اعتبارنامه‌ها یک ریسک محسوب می‌شود، به‌ویژه در APIهای عمومی یا سرویس‌هایی که پاسخ‌ها را لاگ می‌کنند.

نکته کلیدی: عدم استفاده از یک response model می‌تواند یک پوشش (wrapper) امن برای اطلاعات حساس را به یک نشت داده تبدیل کند. اضافه کردن response modelهای صریح یا انکودرهای سفارشی، روشی ارزان و قابل اعتماد برای پنهان نگه داشتن اعتبارنامه‌ها تا زمانی است که FastAPI یک اصلاحیه داخلی ارائه دهد.