FastAPI 0.140.0-0.141.1 kann die Rohwerte offenlegen, die in den Secret-Klassen von Pydantic gekapselt sind, wenn eine Route ein einfaches Dictionary oder eine Liste ohne ein Response-Modell zurückgibt. Das Datenleck kann Passwörter, API-Schlüssel oder andere Anmeldedaten preisgeben, die ein Entwickler zu verbergen versucht hat.

Warum dieser Bug wichtig ist

FastAPI erstellt JSON-Antworten, indem es den Rückgabetyp einer View-Funktion untersucht. Wenn Sie ein Response-Modell angeben, übergibt FastAPI das Objekt an Pydantic, welches SecretStr als "**********" maskiert. In den betroffenen Versionen erkennt das Framework nur den integrierten SecretStr-Typ. Wenn Sie Secret unterklassen (oder einen benutzerdefinierten Secret-Typ verwenden) und das Objekt innerhalb eines rohen Dicts oder einer Liste zurückgeben, greift FastAPI auf eine generische Objekt-zu-Dict-Konvertierung zurück. Diese Konvertierung greift auf das private Attribut zu, das den eigentlichen Geheimniswert enthält, und sendet ihn unverändert an den Client.

Das Datenleck tritt nur auf, wenn alle drei Bedingungen erfüllt sind:

  • Der Secret-Typ erbt von der Secret-Basisklasse von Pydantic.
  • Die Route deklariert kein Response-Modell.
  • Die View gibt das Secret innerhalb eines einfachen dict oder einer list zurück.

So schützen Sie Ihre Secrets heute

  • Deklarieren Sie ein Response-Modell für jeden Endpunkt, der Daten mit Secrets zurückgeben könnte. FastAPI überlässt dann Pydantic die Serialisierung, welche die Werte korrekt maskiert.
  • Kapseln Sie Secrets in einem Pydantic BaseModel-Feld, anstatt rohe Container zurückzugeben. Der Feldtyp des Modells kann eine anerkannte Secret-Klasse sein, was eine ordnungsgemäße Handhabung gewährleistet.
  • Registrieren Sie einen benutzerdefinierten JSON-Encoder für Ihre Secret-Unterklasse, falls Sie den aktuellen Rückgabestil beibehalten müssen. Der Encoder kann die maskierte Darstellung ("**********") zurückgeben.

Schweregrad und Reaktion der Community

Das Problem ist von geringem Schweregrad. Es erfordert ein spezifisches Setup, um ausgelöst zu werden, aber jede versehentliche Offenlegung von Anmeldedaten stellt ein Risiko dar, insbesondere bei öffentlichen APIs oder Diensten, die Antworten protokollieren.

Fazit: Das Weglassen eines Response-Modells kann einen gut gemeinten Secret-Wrapper in ein Datenleck verwandeln. Das Hinzufügen expliziter Response-Modelle oder benutzerdefinierter Encoder ist ein einfacher und zuverlässiger Weg, um Anmeldedaten verborgen zu halten, bis FastAPI einen integrierten Fix bereitstellt.