FastAPI 0.140.0-0.141.1 може розкривати необроблені значення, загорнуті в класи Secret бібліотеки Pydantic, коли маршрут повертає звичайний словник або список без моделі відповіді. Цей витік може розкрити паролі, API-ключі або будь-які інші облікові дані, які розробник намагався приховати.

Чому цей баг важливий

FastAPI формує JSON-відповіді, перевіряючи тип значення, що повертається функцією представлення. Якщо ви надаєте модель відповіді, FastAPI передає об'єкт у Pydantic, який маскує SecretStr як "**********". У версіях, що підлягають впливу, фреймворк розпізнає лише вбудований тип SecretStr. Коли ви створюєте підклас Secret (або використовуєте власний тип секрету) і повертаєте об'єкт усередині сирого dict або list, FastAPI переходить до загальної конвертації об'єкта в словник. Ця конвертація звертається до приватного атрибута, який містить фактичне секретне значення, і надсилає його клієнту без змін.

Витік відбувається лише тоді, коли виконуються всі три умови:

  • Тип секрету є підкласом базового класу Secret від Pydantic.
  • Маршрут не оголошує модель відповіді.
  • Функція представлення повертає секрет усередині звичайного dict або list.

Як захистити свої секрети вже сьогодні

  • Оголошуйте модель відповіді для кожного ендпоінту, який може повертати дані, що містять секрети. Тоді FastAPI дозволить Pydantic керувати серіалізацією, що забезпечить правильне маскування значень.
  • Загортайте секрети в поле BaseModel від Pydantic замість того, щоб повертати сирі контейнери. Тип поля моделі може бути розпізнаваним класом секрету, що забезпечить належну обробку.
  • Зареєструйте власний JSON-енкодер для вашого підкласу секрету, якщо ви мусите залишити поточний стиль повернення даних. Енкодер може повертати масковане представлення ("**********").

Рівень серйозності та реакція спільноти

Проблема має низький рівень серйозності. Для її виникнення потрібне специфічне налаштування, проте будь-яке випадкове розкриття облікових даних є ризиком, особливо в публічних API або сервісах, які логують відповіді.

Висновок: Відсутність моделі відповіді може перетворити добре продуману обгортку для секретів на витік даних. Додавання явних моделей відповіді або власних енкодерів — це простий і надійний спосіб приховати облікові дані до того часу, поки FastAPI не випустить вбудоване виправлення.