FastAPI 0.140.0-0.141.1 peut exposer les valeurs brutes encapsulées par les classes Secret de Pydantic lorsqu'une route renvoie un dictionnaire ou une liste simple sans modèle de réponse. La fuite peut révéler des mots de passe, des clés API ou toute autre information d'identification qu'un développeur a tenté de masquer.
Pourquoi ce bug est important
FastAPI construit les réponses JSON en inspectant le type de retour d'une fonction de vue. Si vous fournissez un modèle de réponse, FastAPI transmet l'objet à Pydantic, qui masque SecretStr par "**********". Dans les versions affectées, le framework ne reconnaît que le type intégré SecretStr. Lorsque vous créez une sous-classe de Secret (ou utilisez un type de secret personnalisé) et que vous renvoyez l'objet à l'intérieur d'un dictionnaire ou d'une liste brute, FastAPI se rabat sur une conversion générique d'objet en dictionnaire. Cette conversion accède à l'attribut privé qui contient la valeur secrète réelle et l'envoie au client sans modification.
La fuite ne se produit que lorsque les trois conditions suivantes sont réunies :
- Le type de secret est une sous-classe de la classe de base
Secretde Pydantic. - La route ne déclare pas de modèle de réponse.
- La vue renvoie le secret à l'intérieur d'un
dictou d'unelistsimple.
Comment protéger vos secrets dès aujourd'hui
- Déclarez un modèle de réponse pour chaque point de terminaison susceptible de renvoyer des données contenant des secrets. FastAPI laissera alors Pydantic gérer la sérialisation, ce qui masquera correctement les valeurs.
- Encapsulez les secrets dans un champ
BaseModelde Pydantic au lieu de renvoyer des conteneurs bruts. Le type de champ du modèle peut être une classe de secret reconnue, garantissant un traitement approprié. - Enregistrez un encodeur JSON personnalisé pour votre sous-classe de secret si vous devez conserver le style de retour actuel. L'encodeur peut renvoyer la représentation masquée (
"**********").
Gravité et réponse de la communauté
Le problème est de faible gravité. Il nécessite une configuration spécifique pour se déclencher, mais toute exposition accidentelle d'identifiants constitue un risque, en particulier dans les API publiques ou les services qui enregistrent les réponses.
À retenir : L'omission d'un modèle de réponse peut transformer un wrapper de secret bien intentionné en une fuite de données. L'ajout de modèles de réponse explicites ou d'encodeurs personnalisés est un moyen simple et fiable de garder les identifiants cachés jusqu'à ce que FastAPI publie un correctif intégré.
