FastAPI 0.140.0-0.141.1 kan de ruwe waarden blootstellen die zijn ingekapseld door de Secret-klassen van Pydantic wanneer een route een gewone dictionary of lijst retourneert zonder een response model. Het lek kan wachtwoorden, API-sleutels of andere gegevens onthullen die een ontwikkelaar probeerde te verbergen.
Waarom deze bug belangrijk is
FastAPI bouwt JSON-responses door het retourtype van een view-functie te inspecteren. Als je een response model opgeeft, geeft FastAPI het object door aan Pydantic, dat SecretStr maskeert als "**********". In de getroffen versies herkent het framework alleen het ingebouwde SecretStr-type. Wanneer je een subklasse van Secret maakt (of een aangepast secret-type gebruikt) en het object binnen een ruwe dict of lijst retourneert, valt FastAPI terug op een generieke object-naar-dict conversie. Die conversie bereikt het private attribuut dat de werkelijke geheime waarde bevat en stuurt deze ongewijzigd naar de client.
Het lek treedt alleen op wanneer aan alle drie de voorwaarden wordt voldaan:
- Het secret-type is een subklasse van de
Secretbase class van Pydantic. - De route geeft geen response model op.
- De view retourneert het geheim binnen een gewone
dictoflist.
Hoe je je geheimen vandaag nog kunt beschermen
- Geef een response model op voor elk endpoint dat mogelijk gegevens met geheimen retourneert. FastAPI laat Pydantic dan de serialisatie afhandelen, wat de waarden correct maskeert.
- Kapsel geheimen in een Pydantic
BaseModelfield in in plaats van ruwe containers te retourneren. Het veldtype van het model kan een herkend secret-klasse zijn, wat zorgt voor de juiste afhandeling. - Registreer een aangepaste JSON encoder voor je secret-subklasse als je de huidige retourstijl wilt behouden. De encoder kan de gemaskeerde weergave (
"**********") retourneren.
Ernst en reactie van de community
Het probleem heeft een lage ernst. Er is een specifieke configuratie nodig om het te triggeren, maar elke accidentele blootstelling van inloggegevens vormt een risico, vooral in publieke API's of services die responses loggen.
Conclusie: Het weglaten van een response model kan een goedbedoelde secret wrapper veranderen in een datalek. Het toevoegen van expliciete response models of aangepaste encoders is een eenvoudige, betrouwbare manier om inloggegevens verborgen te houden totdat FastAPI een ingebouwde fix uitbrengt.
