FastAPI 0.140.0-0.141.1 puede exponer los valores sin procesar envueltos por las clases Secret de Pydantic cuando una ruta devuelve un diccionario o una lista simple sin un modelo de respuesta. La filtración puede revelar contraseñas, claves de API o cualquier otra credencial que un desarrollador haya intentado ocultar.
Por qué es importante este error
FastAPI construye las respuestas JSON inspeccionando el tipo de retorno de la función de vista. Si proporcionas un modelo de respuesta, FastAPI entrega el objeto a Pydantic, que enmascara SecretStr como "**********". En las versiones afectadas, el framework solo reconoce el tipo SecretStr integrado. Cuando creas una subclase de Secret (o usas un tipo de secreto personalizado) y devuelves el objeto dentro de un dict o una list sin procesar, FastAPI recurre a una conversión genérica de objeto a diccionario. Esa conversión accede al atributo privado que contiene el valor real del secreto y lo envía al cliente sin cambios.
La filtración ocurre solo cuando se cumplen las tres condiciones:
- El tipo de secreto es una subclase de la clase base
Secretde Pydantic. - La ruta no declara un modelo de respuesta.
- La vista devuelve el secreto dentro de un
dicto unalistsimple.
Cómo proteger tus secretos hoy mismo
- Declara un modelo de respuesta para cada endpoint que pueda devolver datos que contengan secretos. FastAPI permitirá entonces que Pydantic se encargue de la serialización, lo que enmascara correctamente los valores.
- Envuelve los secretos dentro de un campo de un
BaseModelde Pydantic en lugar de devolver contenedores sin procesar. El tipo de campo del modelo puede ser una clase de secreto reconocida, lo que garantiza un manejo adecuado. - Registra un codificador JSON personalizado para tu subclase de secreto si debes mantener el estilo de retorno actual. El codificador puede devolver la representación enmascarada (
"**********").
Severidad y respuesta de la comunidad
El problema tiene una severidad baja. Requiere una configuración específica para activarse, pero cualquier exposición accidental de credenciales es un riesgo, especialmente en APIs públicas o servicios que registran las respuestas.
Conclusión: Omitir un modelo de respuesta puede convertir un envoltorio de secretos bien intencionado en una filtración de datos. Añadir modelos de respuesta explícitos o codificadores personalizados es una forma económica y fiable de mantener las credenciales ocultas hasta que FastAPI lance una solución integrada.
