Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala

This commit is contained in:
Translator
2026-01-18 11:59:45 +00:00
parent a40022ac6a
commit 7ae81607d6
@@ -12,7 +12,7 @@ Para más información sobre este servicio consulta:
### Microsoft.Web/staticSites/snippets/write
Es posible hacer que una página web estática cargue código HTML arbitrario creando un snippet. Esto podría permitir a un atacante inyectar código JS dentro de la web app y robar información sensible como credenciales o claves mnemónicas (en web3 wallets).
Es posible hacer que una página web estática cargue código HTML arbitrario creando un snippet. Esto podría permitir a un atacante inyectar código JS dentro de la web app y robar información sensible, como credenciales o mnemonic keys (en web3 wallets).
El siguiente comando crea un snippet que siempre será cargado por la web app::
```bash
@@ -71,12 +71,12 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Sobrescribir archivo - Sobrescribir rutas, HTML, JS...
Es posible **sobrescribir un archivo dentro del Github repo** que contiene la app a través de Azure si se dispone del **Github token**, enviando una solicitud como la siguiente que indicará la ruta del archivo a sobrescribir, el contenido del archivo y el mensaje del commit.
Es posible **sobrescribir un archivo dentro del repo de Github** que contiene la app mediante Azure disponiendo del **Github token**, enviando una solicitud como la siguiente que indicará la ruta del archivo a sobrescribir, el contenido del archivo y el mensaje del commit.
This can be abused by attackers to basically **change the content of the web app** to serve malicious content (steal credentials, mnemonic keys...) or just to **re-route certain paths** to their own servers by overwriting the `staticwebapp.config.json` file.
Esto puede ser abusado por atacantes para, básicamente, **cambiar el contenido de la aplicación web** y servir contenido malicioso (robar credenciales, claves mnemónicas...) o simplemente **redirigir ciertas rutas** a sus propios servidores sobrescribiendo el archivo `staticwebapp.config.json`.
> [!WARNING]
> Ten en cuenta que si un atacante logra comprometer el Github repo de alguna manera, también puede sobrescribir el archivo directamente desde Github.
> Tenga en cuenta que si un atacante logra comprometer el repo de Github de cualquier manera, también puede sobrescribir el archivo directamente desde Github.
```bash
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
@@ -133,7 +133,7 @@ az rest --method put \
```
### Microsoft.Web/staticSites/listSecrets/action
Este permiso permite obtener el **API key deployment token** de la aplicación estática.
Este permiso permite obtener el **API key deployment token** para la aplicación estática.
Usando az rest:
```bash
@@ -144,27 +144,27 @@ Usando AzCLI:
```bash
az staticwebapp secrets list --name <appname> --resource-group <RG>
```
Entonces, para **actualizar una app usando el token** puedes ejecutar el siguiente comando. Ten en cuenta que este comando se extrajo revisando **cómo funciona la Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, ya que es la que Azure configura por defecto para usar. Por lo tanto, la imagen y los parámetros podrían cambiar en el futuro.
Entonces, para **actualizar una app usando el token** puedes ejecutar el siguiente comando. Ten en cuenta que este comando se extrajo revisando **cómo funciona la Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, ya que es la que Azure establece por defecto para usar. Por lo tanto, la imagen y los parámetros podrían cambiar en el futuro.
> [!TIP]
> Para desplegar la app puedes usar la herramienta **`swa`** de [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) o seguir los siguientes pasos manuales:
> Para desplegar la app puedes usar la herramienta **`swa`** de [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) o seguir los siguientes pasos:
1. Descarga el repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (o cualquier otro repo que quieras desplegar) y ejecuta `cd react-basic`.
2. Modifica el código que quieres desplegar
3. Desplégalo ejecutando (Recuerda cambiar el `<api-token>`):
2. Cambia el código que quieras desplegar
3. Desplégalo ejecutando (recuerda cambiar el `<api-token>`):
```bash
docker run --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN=<api-token> INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose
```
> [!WARNING]
> Incluso si tienes el token no podrás desplegar la app si la **Deployment Authorization Policy** está establecida en **Github**. Para usar el token necesitarás el permiso `Microsoft.Web/staticSites/write` para cambiar el método de despliegue y usar el APi token.
> Incluso si tienes el token no podrás desplegar la app si la **Política de autorización de despliegue** está establecida en **Github**. Para usar el token necesitarás el permiso `Microsoft.Web/staticSites/write` para cambiar el método de despliegue y usar el APi token.
### Microsoft.Web/staticSites/write
Con este permiso es posible **cambiar la fuente de la static web app a un repositorio de Github diferente**, sin embargo, no se aprovisionará automáticamente ya que esto debe hacerse desde una Github Action.
Sin embargo, si la **Deployment Authorization Policy** está establecida en **Github**, ¡es posible **actualizar la app desde el nuevo repositorio fuente!**.
Sin embargo, si la **Política de autorización de despliegue** está establecida en **Github**, ¡es posible **actualizar la app desde el nuevo repositorio fuente**!.
En caso de que la **Deployment Authorization Policy** no esté configurada en Github, puedes cambiarla con el mismo permiso `Microsoft.Web/staticSites/write`.
En caso de que la **Política de autorización de despliegue** no esté establecida en Github, puedes cambiarla con el mismo permiso `Microsoft.Web/staticSites/write`.
```bash
# Change the source to a different Github repository
az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main
@@ -187,7 +187,7 @@ az rest --method PATCH \
}
}'
```
Ejemplo de Github Action para desplegar la app:
Ejemplo de Github Action para desplegar la aplicación:
```yaml
name: Azure Static Web Apps CI/CD
@@ -250,7 +250,7 @@ action: "close"
```
### Microsoft.Web/staticSites/resetapikey/action
Con este permiso es posible **reset the API key of the static web app**, potencialmente DoSing los workflows que despliegan automáticamente la aplicación.
Con este permiso es posible **restablecer la API key de la static web app**, potencialmente DoSing los workflows que despliegan automáticamente la app.
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/resetapikey?api-version=2019-08-01"
@@ -259,7 +259,7 @@ az rest --method POST \
Este permiso permite **crear una invitación para un usuario** para acceder a rutas protegidas dentro de una static web app con un rol específico.
El inicio de sesión está ubicado en una ruta como `/.auth/login/github` para github o `/.auth/login/aad` para Entra ID, y un usuario puede ser invitado con el siguiente comando:
El inicio de sesión se encuentra en una ruta como `/.auth/login/github` para github o `/.auth/login/aad` para Entra ID, y un usuario puede ser invitado con el siguiente comando:
```bash
az staticwebapp users invite \
--authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \
@@ -272,12 +272,12 @@ az staticwebapp users invite \
```
### Pull Requests
Por defecto los Pull Requests desde una rama del mismo repo se compilan y construyen automáticamente en un entorno de staging. Esto podría ser aprovechado por un atacante con acceso de escritura al repo pero sin poder eludir las protecciones de rama de la rama de producción (por lo general `main`) para **desplegar una versión maliciosa de la app** en la URL de staging.
Por defecto los Pull Requests desde una rama en el mismo repo se compilan y construyen automáticamente en un entorno de staging. Esto podría ser abusado por un atacante con acceso de escritura al repo pero sin poder eludir las protecciones de rama de la rama de producción (normalmente `main`) para **desplegar una versión maliciosa de la app** en la URL de staging.
La URL de staging tiene este formato: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` como: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
> [!TIP]
> Ten en cuenta que por defecto los PRs externos no ejecutarán workflows a menos que hayan fusionado al menos 1 PR en el repositorio. Un atacante podría enviar un PR válido al repo y **luego enviar un PR malicioso** al repo para desplegar la app maliciosa en el entorno de staging. SIN EMBARGO, existe una protección inesperada: la Github Action por defecto para desplegar en la static web app necesita acceso al secret que contiene el token de despliegue (como `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) incluso si el despliegue se realiza con el IDToken. Esto significa que, dado que un PR externo no tendrá acceso a ese secret y un PR externo no puede modificar el Workflow para colocar aquí un token arbitrario sin que un PR sea aceptado, **este ataque realmente no funcionará**.
> Ten en cuenta que por defecto los PRs externos no ejecutarán workflows a menos que hayan fusionado al menos 1 PR en el repositorio. Un atacante podría enviar un PR válido al repo y **luego enviar un PR malicioso** al repo para desplegar la app maliciosa en el entorno de staging. SIN EMBARGO, hay una protección inesperada: la Github Action por defecto para desplegar en la static web app necesita acceso al secret que contiene el token de despliegue (como `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) incluso si el despliegue se realiza con el IDToken. Esto significa que, puesto que un PR externo no tendrá acceso a ese secret y un PR externo no puede cambiar el Workflow para colocar aquí un token arbitrario sin que un PR sea aceptado, **este ataque realmente no funcionará**.
{{#include ../../../banners/hacktricks-training.md}}