
सुरक्षा परामर्श: Azure APIM डेवलपर पोर्टल UI साइनअप प्रतिबंधों को बायपास करके क्रॉस-टेनेंट खाता पंजीकरण की अनुमति देता है। MSRC को दो बार रिपोर्ट किया गया - "बाय डिज़ाइन" के रूप में बंद किया गया।
स्थिति (01.12.2025): यह भेद्यता अभी भी सक्रिय और शोषण योग्य है। Microsoft ने इस समस्या को पैच नहीं किया है और इसे "by design" (डिज़ाइन द्वारा) मानता है।
Azure API Management (APIM) डेवलपर पोर्टल में एक सुरक्षा भेद्यता हमलावरों को किसी भी APIM इंस्टेंस पर खाता पंजीकृत करने की अनुमति देती है, जिसमें बेसिक प्रमाणीकरण (Basic Authentication) सक्षम है, भले ही प्रशासकों ने पोर्टल UI में उपयोगकर्ता साइनअप अक्षम कर दिया हो।
यह बाईपास क्रॉस-टेनेंट खाता निर्माण सक्षम करता है, जो संभावित रूप से API दस्तावेज़ीकरण, सदस्यता कुंजियों (subscription keys) और डेवलपर पोर्टल के माध्यम से उजागर अन्य संसाधनों तक अनधिकृत पहुँच की अनुमति देता है।
| तिथि | कार्रवाई |
|---|---|
| 2025-09-30 | भेद्यता की खोज हुई |
| 2025-09-30 | MSRC को प्रारंभिक रिपोर्ट प्रस्तुत की गई |
| 2025-10-30 | MSRC प्रतिक्रिया: "भेद्यता नहीं" के रूप में बंद |
| 2025-11-01 | अतिरिक्त विवरण के साथ MSRC को दूसरी रिपोर्ट प्रस्तुत की गई |
| 2025-11-20 | MSRC प्रतिक्रिया: "डिज़ाइन द्वारा" के रूप में बंद |
| 2025-11-20 | CERT-FI को रिपोर्ट किया गया |
| 2025-11-26 | सार्वजनिक प्रकटीकरण |
| 2025-11-27 | MITRE से CVE अनुरोध किया गया |
| 2026-07-09 | CVE-2025-66390 MITRE TL-Root/CNA-LR द्वारा निर्धारित |
जब Azure APIM डेवलपर पोर्टल के लिए बेसिक प्रमाणीकरण के साथ कॉन्फ़िगर किया जाता है, तो प्रशासक Azure पोर्टल UI के माध्यम से उपयोगकर्ता पंजीकरण अक्षम कर सकते हैं। हालाँकि, यह केवल पोर्टल इंटरफ़ेस में साइनअप फ़ॉर्म को छुपाता है।
अंतर्निहित साइनअप API एंडपॉइंट सक्रिय रहता है और सीधे पंजीकरण अनुरोध स्वीकार करता है, जिससे UI प्रतिबंध पूरी तरह से बाईपास हो जाता है।
दो समस्याएँ मिलकर यह भेद्यता उत्पन्न करती हैं:
हमले के लिए दो APIM इंस्टेंस की आवश्यकता होती है:
चरण:
Host हेडर को अपने इंस्टेंस से बदलकर लक्ष्य इंस्टेंस कर देता हैमुख्य तकनीकी विवरण: क्रॉस-टेनेंट बाईपास साइनअप POST अनुरोध में Host हेडर में हेरफेर करके काम करता है। /signup एंडपॉइंट टेनेंट सीमाओं को सत्यापित किए बिना Host हेडर के आधार पर अनुरोधों को संसाधित करता है।
अनुरोध हेरफेर का उदाहरण:
POST /signup HTTP/1.1
Host: target-apim.developer.azure-api.net <-- Changed from attacker's instance
Origin: https://attacker-apim.developer.azure-api.net
Content-Type: application/json
{"challenge":{...},"signupData":{"email":"[email protected]",...}}
मूल समस्या: UI में साइनअप अक्षम करने से अंतर्निहित API अक्षम नहीं होता है। API एंडपॉइंट Host हेडर के आधार पर क्रॉस-टेनेंट अनुरोध स्वीकार करता है।
आपका APIM इंस्टेंस भेद्य है यदि:
आपका APIM इंस्टेंस भेद्य नहीं है यदि:
मुख्य बिंदु: Azure पोर्टल UI में साइनअप अक्षम करना पर्याप्त नहीं है। क्रॉस-टेनेंट साइनअप बाईपास को रोकने के लिए बेसिक प्रमाणीकरण पहचान प्रदाता को पूरी तरह से हटाया जाना चाहिए।
Azure Resource Graph, ARM टेम्पलेट या Azure Policy के माध्यम से भेद्य APIM इंस्टेंस की पहचान करने के लिए इन गुण मानों का उपयोग करें।
| गुण पथ |
|---|
बेसिक प्रमाणीकरण पहचान प्रदाता APIM इंस्टेंस के अंतर्गत एक अलग संसाधन है:
Resource Type: Microsoft.ApiManagement/service/identityProviders
Name: basic
यदि मौजूद है तो भेद्य: basic पहचान प्रदाता संसाधन की उपस्थिति इंगित करती है कि बेसिक प्रमाणीकरण कॉन्फ़िगर किया गया है।
Resource Type: Microsoft.ApiManagement/service/portalsettings/signup
Property: properties.enabled
| गुण | मान | अर्थ |
|---|---|---|
properties.enabled | true | साइनअप UI में दृश्यमान है |
properties.enabled | false | साइनअप UI में छिपा हुआ है (यदि बेसिक प्रमाणीकरण मौजूद है तो API फिर भी काम करता है!) |
संभावित रूप से भेद्य APIM इंस्टेंस खोजने के लिए इस क्वेरी का उपयोग करें:
resources
| where type == "microsoft.apimanagement/service"
| where properties.developerPortalStatus == "Enabled"
| where sku.name != "Consumption"
| project name, resourceGroup, subscriptionId, location, sku.name, properties.developerPortalStatus
बेसिक प्रमाणीकरण पहचान प्रदाताओं की जाँच करने के लिए:
resources
| where type == "microsoft.apimanagement/service/identityproviders"
| where name endswith "/basic"
| project apimInstance=tostring(split(id, "/providers/Microsoft.ApiManagement/service/")[1]), resourceGroup, subscriptionId
डेवलपर पोर्टल स्थिति जाँचें:
az apim show --name <apim-name> --resource-group <rg-name> --query "{name:name, portalStatus:developerPortalStatus, sku:sku.name}"
पहचान प्रदाताओं की सूची बनाएँ ('basic' की जाँच करें):
az apim identity-provider list --resource-group <rg-name> --service-name <apim-name> --query "[].name"
साइनअप सेटिंग्स जाँचें:
az rest --method get --url "https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.ApiManagement/service/<apim-name>/portalsettings/signup?api-version=2022-08-01" --query "properties.enabled"
गंभीर संयोजन: एक इंस्टेंस साइनअप बाईपास के लिए भेद्य होता है जब:
properties.developerPortalStatus == 'Enabled' औरidentityProviders/basic संसाधन मौजूद हो औरportalsettings/signup.properties.enabled == falseकानूनी अस्वीकरण: नीचे दी गई जानकारी केवल आपके अपने संगठन के Azure APIM इंस्टेंस की पहचान और सुरक्षा के लिए प्रदान की गई है। कंप्यूटर सिस्टम तक अनधिकृत पहुँच अवैध है। केवल उन्हीं सिस्टम का परीक्षण करें जिनके आप स्वामी हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित प्राधिकरण है।
बेसिक प्रमाणीकरण साइनअप वाले पोर्टल खोजें (सबसे अधिक संभावित रूप से भेद्य):
site:developer.azure-api.net "Sign up" "Email" "Password"
site:developer.azure-api.net "Create account" "Username"
site:developer.azure-api.net inurl:/signup "register"
साइनइन पृष्ठों वाले पोर्टल खोजें (इंगित करता है कि बेसिक प्रमाणीकरण कॉन्फ़िगर हो सकता है):
site:developer.azure-api.net "Sign in" "Email" "Password" -"Azure AD" -"Microsoft account"
site:developer.azure-api.net inurl:/signin "password"
उजागर API दस्तावेज़ीकरण वाले डेवलपर पोर्टल खोजें:
site:developer.azure-api.net inurl:/apis "Subscribe"
site:developer.azure-api.net "API" "Products" "Subscribe"
सामान्य खोज:
site:*.developer.azure-api.net
inurl:developer.azure-api.net "Developer Portal"
APIM डेवलपर पोर्टल खोजें:
http.title:"Developer Portal" http.html:"azure-api.net"
ssl.cert.subject.cn:"*.developer.azure-api.net"
http.html:"developerPortal" http.html:"azure"
लक्ष्य खोजने के बाद, Nuclei से स्कैन करें:
# Save targets to file
echo "https://target1.developer.azure-api.net" > targets.txt
echo "https://target2.developer.azure-api.net" >> targets.txt
# Mass scan
nuclei -t azure-apim-signup-bypass.yaml -l targets.txt -o vulnerable.txt
यदि आपका संगठन Azure APIM का उपयोग करता है, तो आप अपने स्वयं के इंस्टेंस की पहचान इस प्रकार कर सकते हैं:
Azure पोर्टल:
Azure CLI (अपनी सदस्यताओं के लिए):
# List all APIM instances in your subscriptions
az apim list --query "[].{name:name, resourceGroup:resourceGroup, url:developerPortalUrl}"
यह जाँचने के लिए इन विधियों का उपयोग करें कि क्या आपके संगठन के APIM इंस्टेंस भेद्य हैं:
सत्यापन स्क्रिप्ट का उपयोग करना:
# Check your own instance
python apim_vuln_checker.py https://YOUR-ORG.developer.azure-api.net
# With Azure RM property checks (recommended for internal audits)
python apim_vuln_checker.py --azure -s YOUR-SUB-ID -g YOUR-RG -n YOUR-APIM-NAME
आंतरिक सुरक्षा ऑडिट के लिए Nuclei का उपयोग करना:
# Scan your organization's APIM instances
nuclei -t azure-apim-signup-bypass.yaml -u https://YOUR-ORG.developer.azure-api.net
अपने स्वयं के इंस्टेंस का ऑडिट करते समय, इन संकेतों को देखें:
भेद्य नहीं होने के संकेतक:
यदि आप अधिकृत परीक्षण करने वाले सुरक्षा पेशेवर हैं:
यदि आप किसी भेद्य तृतीय-पक्ष APIM इंस्टेंस की खोज करते हैं:
यह जाँचने के लिए एक Python स्क्रिप्ट प्रदान की गई है कि क्या आपका APIM इंस्टेंस भेद्य है।
# Basic installation (HTTP probe only)
pip install requests colorama
# Full installation (includes Azure RM property checks)
pip install requests colorama azure-identity
स्क्रिप्ट दो मोड का समर्थन करती है:
# HTTP probe (external check)
python apim_vuln_checker.py https://your-apim.developer.azure-api.net
# Azure RM property check (requires az login)
python apim_vuln_checker.py --azure -s <subscription-id> -g <resource-group> -n <apim-name>
# Combined check (both HTTP probe and Azure RM)
python apim_vuln_checker.py https://your-apim.developer.azure-api.net \
--azure -s <subscription-id> -g <resource-group> -n <apim-name>
# Verbose output
python apim_vuln_checker.py https://your-apim.developer.azure-api.net -v
# Skip SSL verification
python apim_vuln_checker.py https://your-apim.developer.azure-api.net -k
# JSON output
python apim_vuln_checker.py https://your-apim.developer.azure-api.net --json
--azure मोड का उपयोग करते समय, स्क्रिप्ट जाँच के लिए सीधे Azure Resource Manager API से क्वेरी करती है:
| गुण |
|---|
Azure RM मोड के लिए पूर्वापेक्षाएँ:
azure-identity स्थापित करें: pip install azure-identityaz login ___ __ ____
/ _ )___ __ _____ / /___ ____ __ / __ \__ __
/ _ / _ \/ // / _ \/ __/ // / // / / /_/ / // /
/____/\___/\_,_/_//_/\__/\_, /\_, / \____/\_, /
/___//___/ /___/
Author: Mihalis Haatainen, Bountyy Oy - www.bountyy.fi
======================================================================
Azure APIM Vulnerability Checker
Cross-Tenant Signup Bypass Detection
======================================================================
[?] Checking signup endpoint accessibility...
[i] Signup endpoint is accessible
[?] Checking if Basic Auth signup API is accessible...
[!] Basic Auth signup API ACTIVE (captcha validation)
[?] Checking if signup is hidden/disabled in UI...
[i] Signup page returns 404 (hidden in UI)
======================================================================
VULNERABILITY ASSESSMENT RESULTS
======================================================================
Target: https://example.developer.azure-api.net
Risk Level: CRITICAL - VULNERABLE TO SIGNUP BYPASS
Detailed Checks:
[!] signup_ui: Signup endpoint is accessible
[!] basic_auth_api: Basic Auth signup API ACTIVE (captcha validation)
[+] signup_ui_hidden: Signup page returns 404 (hidden in UI)
Recommendations:
CRITICAL: SIGNUP BYPASS VULNERABILITY CONFIRMED
The Basic Auth signup API is accessible even though UI hides signup.
Attackers can register accounts by calling the API directly.
Immediate actions:
1. DISABLE Basic Authentication in Azure Portal immediately
2. Audit all developer portal user accounts for unauthorized signups
3. Review user creation logs - check for API-based registrations
4. Implement Azure AD authentication only
स्वचालित स्कैनिंग के लिए एक Nuclei टेम्पलेट प्रदान किया गया है।
# Single target
nuclei -t azure-apim-signup-bypass.yaml -u https://target.developer.azure-api.net
# Multiple targets from file
nuclei -t azure-apim-signup-bypass.yaml -l targets.txt
# With proxy (for debugging)
nuclei -t azure-apim-signup-bypass.yaml -u https://target.developer.azure-api.net -proxy http://127.0.0.1:8080
# Skip SSL verification
nuclei -t azure-apim-signup-bypass.yaml -u https://target.developer.azure-api.net -insecure
/signup एंडपॉइंट पर परीक्षण कैप्चा डेटा के साथ POST अनुरोध भेजता हैMicrosoft Security Response Center (MSRC) को इस भेद्यता के बारे में दो बार सूचित किया गया था। दोनों रिपोर्ट निम्नलिखित निर्णय के साथ बंद कर दी गईं:
"डिज़ाइन द्वारा"
MSRC प्रशासनिक नियंत्रणों के बाईपास और क्रॉस-टेनेंट निहितार्थों के बावजूद इसे सुरक्षा भेद्यता नहीं मानता है।
apim_vuln_checker.py - Python भेद्यता सत्यापन स्क्रिप्टazure-apim-signup-bypass.yaml - स्वचालित स्कैनिंग के लिए Nuclei टेम्पलेटREADME.md - यह फ़ाइलMihalis Haatainen
Bountyy Oy - फिनिश पेनेट्रेशन टेस्टिंग और सुरक्षा अनुसंधान कंपनी
यह सलाह और संबंधित उपकरण रक्षात्मक उद्देश्यों के लिए जारी किए गए हैं। जिम्मेदारी से उपयोग करें।
MIT लाइसेंस - विवरण के लिए LICENSE फ़ाइल देखें।
| भेद्य मान |
|---|
| विवरण |
|---|
properties.developerPortalStatus | Enabled | डेवलपर पोर्टल सुलभ है |
sku.name | Developer, Basic, Standard, Premium | गैर-Consumption टियर (Consumption टियर में सीमित पोर्टल सुविधाएँ हैं) |
| स्थिति | गुण/संसाधन | भेद्य मान |
|---|
| पोर्टल सक्षम | properties.developerPortalStatus | == 'Enabled' |
| गैर-Consumption SKU | sku.name | != 'Consumption' |
| बेसिक प्रमाणीकरण मौजूद | identityProviders/basic संसाधन | संसाधन मौजूद है |
| साइनअप छिपा हुआ (बाईपास संभव) | portalsettings/signup.properties.enabled | == false (बेसिक प्रमाणीकरण के साथ) |
| भेद्य मान |
|---|
properties.developerPortalStatus | == 'Enabled' |
sku.name | != 'Consumption' |
identityProviders/basic संसाधन | मौजूद है |
portalsettings/signup.properties.enabled | == false |