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 не випустить вбудоване виправлення.
