FastAPI 0.140.0-0.141.1 मध्ये, जेव्हा एखादा route रिस्पॉन्स मॉडेलशिवाय (response model) साधा dictionary किंवा list परत करतो, तेव्हा Pydantic च्या Secret क्लासेसमध्ये गुंफलेली मूळ मूल्ये (raw values) उघड होऊ शकतात. या गळतीमुळे पासवर्ड, API keys किंवा डेव्हलपरने लपवलेले इतर कोणतेही क्रेडेंशियल्स उघड होऊ शकतात.
ही त्रुटी (bug) का महत्त्वाची आहे
FastAPI एका view function च्या रिटर्न टाइपची तपासणी करून JSON रिस्पॉन्स तयार करते. जर तुम्ही response model दिले असेल, तर FastAPI तो ऑब्जेक्ट Pydantic कडे सोपवते, जे SecretStr ला "**********" म्हणून मास्क (mask) करते. बाधित आवृत्त्यांमध्ये (affected versions), फ्रेमवर्क फक्त अंगभूत (built-in) SecretStr टाइप ओळखते. जेव्हा तुम्ही Secret चा सबक्लास (subclass) तयार करता (किंवा कस्टम सिक्रेट टाइप वापरता) आणि तो ऑब्जेक्ट एखाद्या साध्या dict किंवा list मध्ये परत करता, तेव्हा FastAPI एका सामान्य object-to-dict रूपांतरणावर अवलंबून राहते. हे रूपांतर प्रत्यक्ष सिक्रेट व्हॅल्यू धारण करणाऱ्या खाजगी ॲट्रिब्युटपर्यंत (private attribute) पोहोचते आणि ती व्हॅल्यू क्लायंटला कोणताही बदल न करता पाठवते.
ही गळती तेव्हाच होते जेव्हा या तिन्ही अटी पूर्ण होतात:
- सिक्रेट टाइप Pydantic च्या
Secretबेस क्लासचा सबक्लास असेल. - route मध्ये response model घोषित केलेला नसेल.
- view त्या सिक्रेटला साध्या
dictकिंवाlistमध्ये परत करत असेल.
आज तुमचे सिक्रेट्स कसे सुरक्षित ठेवायचे
- ज्या प्रत्येक एंडपॉइंटसाठी (endpoint) सिक्रेट्स असलेली माहिती परत मिळू शकते, तिथे response model घोषित करा. यामुळे FastAPI, Pydantic ला सीरियलायझेशन (serialization) हाताळू देईल, जे व्हॅल्यूज योग्यरित्या मास्क करते.
- साध्या कंटेनर्सऐवजी सिक्रेट्सना Pydantic च्या
BaseModelफील्डमध्ये गुंफून (wrap) ठेवा. मॉडेलचे फील्ड टाइप हे ओळखण्यायोग्य सिक्रेट क्लास असू शकतो, ज्यामुळे योग्य हाताळणी सुनिश्चित होते. - जर तुम्हाला सध्याची रिटर्न स्टाईलच ठेवायची असेल, तर तुमच्या सिक्रेट सबक्लाससाठी एक कस्टम JSON encoder रजिस्टर करा. हा एन्कोडर मास्क केलेले स्वरूप (
"**********") परत करू शकतो.
तीव्रता (Severity) आणि समुदायाची प्रतिक्रिया
ही समस्या कमी तीव्रतेची (low severity) आहे. ती सक्रिय होण्यासाठी विशिष्ट सेटअपची आवश्यकता असते, परंतु क्रेडेंशियल्सची कोणतीही अनपेक्षित गळती ही एक जोखीम आहे, विशेषतः सार्वजनिक APIs किंवा रिस्पॉन्स लॉग करणाऱ्या सेवांमध्ये.
थोडक्यात सांगायचे तर (Takeaway): response model न वापरल्यामुळे, सिक्रेट्स सुरक्षित ठेवण्यासाठी बनवलेला रॅपर (wrapper) देखील डेटा गळतीचे कारण बनू शकतो. FastAPI कडून अंगभूत सुधारणा (built-in fix) येईपर्यंत, क्रेडेंशियल्स लपवून ठेवण्यासाठी स्पष्ट response models किंवा custom encoders वापरणे हा एक सोपा आणि विश्वसनीय मार्ग आहे.
