FastAPI 0.140.0-0.141.1 può esporre i valori grezzi contenuti nelle classi Secret di Pydantic quando una rotta restituisce un semplice dizionario o una lista senza un response model. La fuga può rivelare password, chiavi API o qualsiasi altra credenziale che uno sviluppatore abbia cercato di nascondere.

Perché il bug è importante

FastAPI costruisce le risposte JSON ispezionando il tipo di ritorno di una funzione di view. Se viene fornito un response model, FastAPI passa l'oggetto a Pydantic, che maschera SecretStr come "**********". Nelle versioni interessate, il framework riconosce solo il tipo integrato SecretStr. Quando si crea una sottoclasse di Secret (o si utilizza un tipo di segreto personalizzato) e si restituisce l'oggetto all'interno di un dizionario o di una lista grezzi, FastAPI ricorre a una conversione generica da oggetto a dizionario. Tale conversione accede all'attributo privato che contiene il valore segreto effettivo e lo invia al client senza modifiche.

La fuga avviene solo quando vengono soddisfatte tutte e tre le condizioni:

  • Il tipo di segreto è una sottoclasse della classe base Secret di Pydantic.
  • La rotta non dichiara un response model.
  • La view restituisce il segreto all'interno di un semplice dict o list.

Come proteggere i propri segreti oggi

  • Dichiarare un response model per ogni endpoint che potrebbe restituire dati contenenti segreti. FastAPI permetterà quindi a Pydantic di gestire la serializzazione, che maschera correttamente i valori.
  • Avvolgere i segreti all'interno di un campo BaseModel di Pydantic invece di restituire contenitori grezzi. Il tipo di campo del modello può essere una classe di segreti riconosciuta, garantendo una gestione corretta.
  • Registrare un encoder JSON personalizzato per la sottoclasse del segreto se è necessario mantenere lo stile di ritorno attuale. L'encoder può restituire la rappresentazione mascherata ("**********").

Gravità e risposta della community

Il problema è di bassa gravità. Richiede una configurazione specifica per essere attivato, ma qualsiasi esposizione accidentale di credenziali rappresenta un rischio, specialmente in API pubbliche o servizi che registrano le risposte.

In sintesi: Omettere un response model può trasformare un wrapper per segreti ben intenzionato in una fuga di dati. L'aggiunta di response model espliciti o di encoder personalizzati è un modo economico e affidabile per mantenere nascoste le credenziali finché FastAPI non rilascerà una correzione integrata.