As versões 0.140.0-0.141.1 do FastAPI podem expor os valores brutos encapsulados pelas classes Secret do Pydantic quando uma rota retorna um dicionário ou lista simples sem um modelo de resposta (response model). O vazamento pode revelar senhas, chaves de API ou qualquer outra credencial que um desenvolvedor tenha tentado ocultar.
Por que este bug é importante
O FastAPI constrói respostas JSON inspecionando o tipo de retorno de uma função de visualização (view function). Se você fornecer um modelo de resposta, o FastAPI entrega o objeto ao Pydantic, que mascara o SecretStr como "**********". Nas versões afetadas, o framework reconhece apenas o tipo SecretStr nativo. Quando você cria uma subclasse de Secret (ou usa um tipo de segredo personalizado) e retorna o objeto dentro de um dict ou list bruto, o FastAPI recorre a uma conversão genérica de objeto para dicionário. Essa conversão acessa o atributo privado que contém o valor real do segredo e o envia ao cliente sem alterações.
O vazamento ocorre apenas quando todas as três condições são atendidas:
- O tipo de segredo é uma subclasse da classe base
Secretdo Pydantic. - A rota não declara um modelo de resposta.
- A função de visualização retorna o segredo dentro de um
dictoulistsimples.
Como proteger seus segredos hoje
- Declare um modelo de resposta para cada endpoint que possa retornar dados contendo segredos. O FastAPI permitirá então que o Pydantic cuide da serialização, o que mascara corretamente os valores.
- Encapsule segredos dentro de um campo
BaseModeldo Pydantic em vez de retornar contêineres brutos. O tipo do campo do modelo pode ser uma classe de segredo reconhecida, garantindo o tratamento adequado. - Registre um codificador JSON (JSON encoder) personalizado para sua subclasse de segredo, caso precise manter o estilo de retorno atual. O codificador pode retornar a representação mascarada (
"**********").
Gravidade e resposta da comunidade
O problema tem gravidade baixa. Ele requer uma configuração específica para ser acionado, mas qualquer exposição acidental de credenciais é um risco, especialmente em APIs públicas ou serviços que registram (log) respostas.
Conclusão: Omitir um modelo de resposta pode transformar um encapsulador de segredos bem-intencionado em um vazamento de dados. Adicionar modelos de resposta explícitos ou codificadores personalizados é uma maneira barata e confiável de manter as credenciais ocultas até que o FastAPI lance uma correção nativa.
