FastAPI 0.140.0-0.141.1 వెర్షన్లలో, ఒక రూట్ (route) రెస్పాన్స్ మోడల్ (response model) లేకుండా సాధారణ డిక్షనరీ (dictionary) లేదా లిస్ట్ (list)ను రిటర్న్ చేసినప్పుడు, Pydantic యొక్క Secret క్లాస్‌ల ద్వారా కప్పబడిన ముడి విలువలు (raw values) బయటపడే అవకాశం ఉంది. ఈ లీకేజీ వల్ల పాస్‌వర్డ్‌లు, API కీలు లేదా డెవలపర్ దాచాలని ప్రయత్నించిన ఇతర క్రెడెన్షియల్స్ (credentials) బయటపడవచ్చు.

ఈ బగ్ ఎందుకు ముఖ్యమైనది

FastAPI ఒక వ్యూ ఫంక్షన్ (view function) యొక్క రిటర్న్ టైప్‌ను పరిశీలించడం ద్వారా JSON రెస్పాన్స్‌లను నిర్మిస్తుంది. మీరు ఒక రెస్పాన్స్ మోడల్‌ను అందిస్తే, FastAPI ఆ ఆబ్జెక్ట్‌ను Pydanticకి పంపిస్తుంది, అది SecretStrను "**********" గా మాస్క్ చేస్తుంది. ప్రభావితమైన వెర్షన్లలో, ఫ్రేమ్‌వర్క్ కేవలం బిల్ట్-ఇన్ SecretStr టైప్‌ను మాత్రమే గుర్తిస్తుంది. మీరు Secretను సబ్-క్లాస్ చేసినప్పుడు (లేదా కస్టమ్ సీక్రెట్ టైప్‌ను ఉపయోగించినప్పుడు) మరియు ఆ ఆబ్జెక్ట్‌ను ఒక సాధారణ dict లేదా list లో రిటర్న్ చేసినప్పుడు, FastAPI సాధారణ ఆబ్జెక్ట్-టు-డిక్ట్ (object-to-dict) కన్వర్షన్‌కు వెళ్తుంది. ఆ కన్వర్షన్ అసలు సీక్రెట్ విలువను కలిగి ఉన్న ప్రైవేట్ ఆట్రిబ్యూట్‌ను చేరుకుని, దానిని ఎటువంటి మార్పు లేకుండా క్లయింట్‌కు పంపిస్తుంది.

ఈ లీకేజీ కేవలం ఈ మూడు షరతులు నెరవేరినప్పుడు మాత్రమే జరుగుతుంది:

  • సీక్రెట్ టైప్ Pydantic యొక్క Secret బేస్ క్లాస్‌ను సబ్-క్లాస్ చేసి ఉండాలి.
  • రూట్ (route) రెస్పాన్స్ మోడల్‌ను డిక్లేర్ చేయకూడదు.
  • వ్యూ (view) ఆ సీక్రెట్‌ను ఒక సాధారణ dict లేదా list లో రిటర్న్ చేయాలి.

మీ సీక్రెట్‌లను ఈరోజే ఎలా రక్షించుకోవాలి

  • సీక్రెట్‌లను కలిగి ఉండే డేటాను రిటర్న్ చేసే ప్రతి ఎండ్‌పాయింట్ (endpoint) కోసం రెస్పాన్స్ మోడల్‌ను డిక్లేర్ చేయండి. అప్పుడు FastAPI, Pydantic ద్వారా సీరియలైజేషన్‌ను (serialization) నిర్వహించేలా చేస్తుంది, ఇది విలువలను సరిగ్గా మాస్క్ చేస్తుంది.
  • ముడి కంటైనర్లను (raw containers) రిటర్న్ చేసే బదులు, సీక్రెట్‌లను Pydantic BaseModel ఫీల్డ్‌లో ఉంచండి. మోడల్ యొక్క ఫీల్డ్ టైప్ ఒక గుర్తింపు పొందిన సీక్రెట్ క్లాస్ అయితే, అది సరైన హ్యాండ్లింగ్‌ను నిర్ధారిస్తుంది.
  • మీరు ప్రస్తుత రిటర్న్ స్టైల్‌నే కొనసాగించాలనుకుంటే, మీ సీక్రెట్ సబ్-క్లాస్ కోసం ఒక కస్టమ్ JSON ఎన్‌కోడర్‌ను (custom JSON encoder) రిజిస్టర్ చేయండి. ఆ ఎన్‌కోడర్ మాస్క్ చేసిన రూపాన్ని ("**********") రిటర్న్ చేయగలదు.

తీవ్రత మరియు కమ్యూనిటీ స్పందన

ఈ సమస్య యొక్క తీవ్రత తక్కువ (low severity). ఇది సంభవించాలంటే ఒక నిర్దిష్ట సెటప్ అవసరం, కానీ క్రెడెన్షియల్స్ అనుకోకుండా బయటపడటం అనేది ప్రమాదకరమే, ముఖ్యంగా పబ్లిక్ APIలు లేదా రెస్పాన్స్‌లను లాగ్ (log) చేసే సర్వీసులలో.

ముఖ్య గమనిక (Takeaway): రెస్పాన్స్ మోడల్‌ను వదిలేయడం వల్ల, జాగ్రత్తగా రూపొందించిన సీక్రెట్ వ్యాపర్‌ కూడా డేటా లీక్‌గా మారవచ్చు. FastAPI అంతర్గత పరిష్కారాన్ని (built-in fix) విడుదల చేసే వరకు, క్రెడెన్షియల్స్‌ను దాచి ఉంచడానికి స్పష్టమైన రెస్పాన్స్ మోడల్‌లను లేదా కస్టమ్ ఎన్‌కోడర్‌లను జోడించడం అనేది ఒక సులభమైన మరియు నమ్మదగిన మార్గం.