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 Secret do Pydantic.
  • A rota não declara um modelo de resposta.
  • A função de visualização retorna o segredo dentro de um dict ou list simples.

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 BaseModel do 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.