
सुरक्षा परीक्षण के लिए OWASP शीर्ष 10 कमजोरियों वाला असुरक्षित REST API
कमजोर API (OpenAPI 3 पर आधारित)

VAmPI Flask में बनाया गया एक कमजोर API है और इसमें APIs के लिए OWASP शीर्ष 10 कमजोरियाँ शामिल हैं। इसे इसलिए बनाया गया था क्योंकि मुझे APIs में सुरक्षा समस्याओं का पता लगाने के लिए उपयोग किए जाने वाले उपकरणों की दक्षता का मूल्यांकन करने हेतु एक कमजोर API चाहिए था। इसमें परीक्षण के दौरान API को कमजोर या सुरक्षित बनाने के लिए चालू/बंद करने का स्विच शामिल है। यह गलत सकारात्मक/नकारात्मक परिणामों के मामलों को बेहतर ढंग से कवर करता है। VAmPI का उपयोग सीखने/पढ़ाने के उद्देश्यों के लिए भी किया जा सकता है। आप कमजोरियों के बारे में अधिक जानकारी erev0s.com पर पा सकते हैं।
VAmPI की कार्रवाई प्रवाह इस प्रकार है: एक अपंजीकृत उपयोगकर्ता API में शामिल डमी उपयोगकर्ताओं के बारे में न्यूनतम जानकारी देख सकता है। एक उपयोगकर्ता पंजीकरण कर सकता है और फिर लॉगिन कर सकता है ताकि वह लॉगिन के दौरान प्राप्त टोकन का उपयोग करके एक पुस्तक पोस्ट कर सके। पोस्ट की गई पुस्तक के लिए स्वीकार्य डेटा शीर्षक और उस पुस्तक के बारे में एक रहस्य है। प्रत्येक पुस्तक प्रत्येक उपयोगकर्ता के लिए अद्वितीय है और केवल पुस्तक के स्वामी को ही रहस्य देखने की अनुमति होनी चाहिए।
कार्रवाइयों का एक त्वरित विवरण निम्नलिखित तालिका में देखा जा सकता है:
| कार्रवाई | पथ | विवरण |
|---|---|---|
| GET | /createdb | डेटाबेस बनाता है और डमी डेटा से भरता है |
| GET | / | VAmPI होम |
| GET | /me | लॉग इन उपयोगकर्ता को प्रदर्शित करता है |
| GET | /users/v1 | सभी उपयोगकर्ताओं को बुनियादी जानकारी के साथ प्रदर्शित करता है |
| GET | /users/v1/_debug | सभी उपयोगकर्ताओं के सभी विवरण प्रदर्शित करता है |
| POST | /users/v1/register | नया उपयोगकर्ता पंजीकृत करें |
| POST | /users/v1/login | VAmPI में लॉगिन करें |
| GET | /users/v1/{username} | उपयोगकर्ता नाम के अनुसार प्रदर्शित करता है |
| DELETE | /users/v1/{username} | उपयोगकर्ता नाम के अनुसार हटाता है (केवल व्यवस्थापक) |
| PUT | /users/v1/{username}/email | एकल उपयोगकर्ता का ईमेल अपडेट करें |
| PUT | /users/v1/{username}/password | उपयोगकर्ता का पासवर्ड अपडेट करें |
| GET | /books/v1 | सभी पुस्तकों को पुनर्प्राप्त करता है |
| POST | /books/v1 | नई पुस्तक जोड़ें |
| GET | /books/v1/{book} | शीर्षक के साथ रहस्य सहित पुस्तक पुनर्प्राप्त करता है |
अधिक जानकारी के लिए आप या तो VAmPI चलाएँ और http://127.0.0.1:5000/ui/ पर जाएँ, या swagger editor जैसी सेवा का उपयोग करके OpenAPI विनिर्देश प्रदान करें, जो openapi_specs निर्देशिका में पाया जा सकता है।
यह एक Flask एप्लिकेशन है, इसलिए इसे चलाने के लिए आप सभी आवश्यकताएँ स्थापित कर सकते हैं और फिर app.py चला सकते हैं।
सभी आवश्यकताएँ स्थापित करने के लिए बस pip3 install -r requirements.txt चलाएँ और फिर python3 app.py चलाएँ।
या यदि आप पसंद करते हैं, तो आप इसे डॉकर या डॉकर कम्पोज़ के माध्यम से भी चला सकते हैं।
docker run -p 5000:5000 erev0s/vampi:latest
[नोट: यदि आप MacOS के नए संस्करणों पर डॉकर चलाते हैं, तो AirPlay Receiver सेवा के साथ विरोध से बचने के लिए -p 5001:5000 का उपयोग करें। वैकल्पिक रूप से, आप अपने सिस्टम प्राथमिकताएँ -> साझाकरण सेटिंग्स में AirPlay Receiver सेवा को अक्षम कर सकते हैं।]
docker-compose में दो इंस्टेंस शामिल हैं, एक सुरक्षित कॉन्फ़िगरेशन के साथ पोर्ट 5001 पर और दूसरा असुरक्षित कॉन्फ़िगरेशन के साथ पोर्ट 5002 पर:
docker-compose up -d
उस पथ /ui पर जाएँ जहाँ आप API चला रहे हैं और एक Swagger UI उपलब्ध होगा जो आपको आरंभ करने में मदद करेगा!
http://127.0.0.1:5000/ui/
यदि आप लॉगिन के बाद बनाए गए टोकन के टाइमआउट को बदलना चाहते हैं या यदि आप वातावरण को कमजोर नहीं बनाना चाहते हैं, तो आप एप्लिकेशन चलाने के तरीके के आधार पर कुछ तरीकों का उपयोग कर सकते हैं।
python3 app.py के साथ चलाते हैं, तो आपको बस app.py में परिभाषित alive और vuln वेरिएबल्स को संपादित करना होगा। alive वेरिएबल सेकंड में मापा जाता है, इसलिए यदि आप 100 डालते हैं, तो टोकन 100 सेकंड के बाद समाप्त हो जाता है। vuln वेरिएबल बूलियन की तरह है, यदि आप इसे 1 पर सेट करते हैं तो एप्लिकेशन कमजोर है, और यदि आप इसे 0 पर सेट करते हैं तो एप्लिकेशन कमजोर नहीं है।docker run कमांड में पर्यावरण चर पास करने होंगे या Dockerfile को संपादित करके पुनर्निर्माण करना होगा।
डॉकर रन उदाहरण: docker run -d -e vulnerable=0 -e tokentimetolive=300 -p 5000:5000 erev0s/vampi:latest
vulnerable=1 के साथ एक दूसरा कंटेनर एक अलग पोर्ट पर शुरू कर सकते हैं और दोनों के बीच आसानी से स्विच कर सकते हैं।Dockerfile में आपको दो पर्यावरण चर सेट मिलेंगे, ENV vulnerable=1 और ENV tokentimetolive=60। डॉकर बिल्ड कमांड चलाने से पहले इसे बदलने के लिए स्वतंत्र महसूस करें।
/createdb एंडपॉइंट की ओर अनुरोध करना सुनिश्चित करें।