Az - App Services

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Informaci贸n B谩sica del Servicio de Aplicaciones

Azure App Services permite a los desarrolladores crear, implementar y escalar aplicaciones web, backends de aplicaciones m贸viles y APIs sin problemas. Soporta m煤ltiples lenguajes de programaci贸n e integra diversas herramientas y servicios de Azure para una funcionalidad y gesti贸n mejoradas.

Cada aplicaci贸n se ejecuta dentro de un sandbox, pero la aislamiento depende de los planes de App Service:

  • Las aplicaciones en los niveles Gratuito y Compartido se ejecutan en VMs compartidas
  • Las aplicaciones en los niveles Est谩ndar y Premium se ejecutan en VMs dedicadas compartidas solo por aplicaciones en el mismo plan de App Service.
  • Los niveles Aislados se ejecutan en VMs dedicadas en redes virtuales dedicadas, mejorando el aislamiento de las aplicaciones.

Warning

Tenga en cuenta que ninguno de esos aislamientos previene otras vulnerabilidades web comunes (como la carga de archivos o inyecciones). Y si se utiliza una identidad de gesti贸n, podr铆a ser capaz de escalar privilegios a ellas.

Las aplicaciones tienen algunas configuraciones interesantes:

  • Siempre Activo: Asegura que la aplicaci贸n est茅 siempre en ejecuci贸n. Si no est谩 habilitado, la aplicaci贸n dejar谩 de ejecutarse despu茅s de 20 minutos de inactividad y comenzar谩 de nuevo cuando se reciba una solicitud.
  • Esto es esencial si tiene un webjob que necesita ejecutarse continuamente, ya que el webjob se detendr谩 si la aplicaci贸n se detiene.
  • SSH: Si est谩 habilitado, un usuario con suficientes permisos puede conectarse a la aplicaci贸n usando SSH.
  • Depuraci贸n: Si est谩 habilitado, un usuario con suficientes permisos puede depurar la aplicaci贸n. Sin embargo, esto se desactiva autom谩ticamente cada 48 horas.
  • Aplicaci贸n Web + Base de Datos: La consola web permite crear una aplicaci贸n con una base de datos. En este caso, es posible seleccionar la base de datos a utilizar (SQLAzure, PostgreSQL, MySQL, MongoDB) y tambi茅n permite crear un Azure Cache para Redis.
  • La URL que contiene las credenciales para la base de datos y Redis se almacenar谩 en los appsettings.
  • Contenedor: Es posible implementar un contenedor en el App Service indicando la URL del contenedor y las credenciales para acceder a 茅l.
  • Montajes: Es posible crear 5 montajes desde cuentas de almacenamiento, siendo estas Azure Blob (Solo Lectura) o Azure Files. La configuraci贸n almacenar谩 la clave de acceso sobre la Cuenta de Almacenamiento.
  • Redes: Puede ser p煤blicamente disponible o solo accesible a trav茅s de puntos finales privados desde una VNet.

Autenticaci贸n B谩sica

Al crear una aplicaci贸n web (y una funci贸n de Azure generalmente), es posible indicar si desea que la Autenticaci贸n B谩sica est茅 habilitada (desactivada por defecto). Esto b谩sicamente habilita SCM (Source Control Manager) y FTP (File Transfer Protocol) para la aplicaci贸n, por lo que ser谩 posible implementar la aplicaci贸n utilizando esas tecnolog铆as.

Para acceder a los servidores SCM y FTP, se requiere un nombre de usuario y contrase帽a. Por lo tanto, Azure proporciona algunas APIs para obtener las URLs a estas plataformas y las credenciales.

El servidor FTP no tiene ninguna magia especial, solo con la URL v谩lida, nombre de usuario y contrase帽a es posible conectarse y obtener permisos de lectura y escritura sobre el entorno de la aplicaci贸n.

El SCM Es posible conectarse al SCM usando un navegador web en https://<SMC-URL>/BasicAuth y verificar todos los archivos y despliegues all铆.

Kudu

Kudu es la plataforma que gestiona tanto el SCM como una interfaz web y API para gestionar un App Service, y proporciona implementaciones basadas en Git, depuraci贸n remota y capacidades de gesti贸n de archivos. Es accesible a trav茅s de la URL SCM definida en la aplicaci贸n web.

Tenga en cuenta que las versiones de Kudu utilizadas por App Services y por Function Apps son diferentes, siendo la versi贸n de las Function apps mucho m谩s limitada.

Algunos puntos finales interesantes que puede encontrar en Kudu son:

  • /BasicAuth: Necesita acceder a esta ruta para iniciar sesi贸n dentro de Kudu.
  • /DebugConsole: Una consola que permite ejecutar comandos en el entorno donde se est谩 ejecutando Kudu.
  • Tenga en cuenta que este entorno no tiene acceso al servicio de metadatos para obtener tokens.
  • /webssh/host: Un cliente SSH basado en web que permite conectarse dentro del contenedor donde se est谩 ejecutando la aplicaci贸n.
  • Este entorno tiene acceso al servicio de metadatos para obtener tokens de las identidades gestionadas asignadas.
  • /Env: Obtiene informaci贸n sobre el sistema, configuraciones de la aplicaci贸n, variables de entorno, cadenas de conexi贸n y encabezados HTTP.
  • /wwwroot/: El directorio ra铆z de la aplicaci贸n web. Puede descargar todos los archivos desde aqu铆.

Adem谩s, Kudu sol铆a ser de c贸digo abierto en https://github.com/projectkudu/kudu pero el proyecto fue descontinuado y comparando el comportamiento del Kudu actual en Azure con el antiguo, es posible ver que varias cosas ya han cambiado.

Fuentes

Los App Services permiten subir el c贸digo como un archivo zip por defecto, pero tambi茅n permiten conectarse a un servicio de terceros y obtener el c贸digo desde all铆.

  • Las fuentes de terceros actualmente soportadas son Github y Bitbucket.
  • Puede obtener los tokens de autenticaci贸n ejecutando az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
  • Azure por defecto configurar谩 una Github Action para implementar el c贸digo en el App Service cada vez que se actualice el c贸digo.
  • Tambi茅n es posible indicar un repositorio git remoto (con nombre de usuario y contrase帽a) para obtener el c贸digo desde all铆.
  • Puede obtener las credenciales del repositorio remoto ejecutando az webapp deployment source show --name <app-name> --resource-group <res-group> o az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"
  • Tambi茅n es posible usar un Azure Repository.
  • Tambi茅n es posible configurar un repositorio git local.
  • Puede obtener la URL del repositorio git con az webapp deployment source show --name <app-name> --resource-group <res-group> y ser谩 la URL SCM de la aplicaci贸n.
  • Para clonarlo necesitar谩 las credenciales SCM que puede obtener con az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>

Webjobs

Azure WebJobs son tareas en segundo plano que se ejecutan en el entorno de Azure App Service. Permiten a los desarrolladores ejecutar scripts o programas junto a sus aplicaciones web, facilitando el manejo de operaciones asincr贸nicas o intensivas en tiempo, como el procesamiento de archivos, manejo de datos o tareas programadas. Hay 2 tipos de web jobs:

  • Continuos: Se ejecutan indefinidamente en un bucle y se activan tan pronto como se crean. Son ideales para tareas que requieren procesamiento constante. Sin embargo, si la aplicaci贸n deja de ejecutarse porque Siempre Activo est谩 deshabilitado y no ha recibido una solicitud en los 煤ltimos 20 minutos, el web job tambi茅n se detendr谩.
  • Activados: Se ejecutan bajo demanda o seg煤n un horario. Son m谩s adecuados para tareas peri贸dicas, como actualizaciones de datos por lotes o rutinas de mantenimiento.

Los webjobs son muy interesantes desde la perspectiva de un atacante, ya que podr铆an usarse para ejecutar c贸digo en el entorno y escalar privilegios a las identidades gestionadas adjuntas.

Adem谩s, siempre es interesante revisar los registros generados por los Webjobs, ya que podr铆an contener informaci贸n sensible.

Slots

Los Slots de Azure App Service se utilizan para implementar diferentes versiones de la aplicaci贸n en el mismo App Service. Esto permite a los desarrolladores probar nuevas caracter铆sticas o cambios en un entorno separado antes de implementarlos en el entorno de producci贸n.

Adem谩s, es posible dirigir un porcentaje del tr谩fico a un slot espec铆fico, lo cual es 煤til para pruebas A/B y para fines de puerta trasera.

Azure Function Apps

B谩sicamente, las aplicaciones de Azure Function son un subconjunto de Azure App Service en la consola web y si va a la consola web y lista todos los servicios de aplicaciones o ejecuta az webapp list en az cli, podr谩 ver las aplicaciones de Function tambi茅n listadas all铆.

Por lo tanto, ambos servicios en realidad tienen mayormente las mismas configuraciones, caracter铆sticas y opciones en el az cli, aunque pueden configurarlas de manera un poco diferente (como los valores predeterminados de appsettings o el uso de una Cuenta de Almacenamiento en las aplicaciones de Function).

Enumeraci贸n

# List webapps
az webapp list
## Less information
az webapp list --query "[].{hostName: defaultHostName, state: state, name: name, resourcegroup: resourceGroup}" -o table
## Get SCM URL of each webapp
az webapp list | grep '"name"' | grep "\.scm\." | awk '{print $2}' | sed 's/"//g'

# Get info about 1 app
az webapp show --name <name> --resource-group <res-group>

# Get instances of a webapp
az webapp list-instances --name <name> --resource-group <res-group>
## If you have enough perm you can go to the "consoleUrl" and access a shell inside the instance form the web

# Get access restrictions of an app
az webapp config access-restriction show --name <name> --resource-group <res-group>

# Remove access restrictions
az webapp config access-restriction remove --resource-group <res-group> -n <name> --rule-name <rule-name>

# Get connection strings of a webapp
az webapp config connection-string list --name <name> --resource-group <res-group>

# Get appsettings of an app
az webapp config appsettings list --name <name> --resource-group <res-group>

# Get SCM and FTP credentials
az webapp deployment list-publishing-profiles --name <name> --resource-group <res-group>

# Get configured Auth information
az webapp auth show --name <app-name> --resource-group <res-group>

# Get backups of a webapp
az webapp config backup list --webapp-name <name> --resource-group <res-group>

# Get backups scheduled for a webapp
az webapp config backup show --webapp-name <name> --resource-group <res-group>

# Get snapshots
az webapp config snapshot list --resource-group <res-group> -n <name>

# Restore snapshot
az webapp config snapshot restore -g <res-group> -n <name> --time 2018-12-11T23:34:16.8388367

# Get slots
az webapp deployment slot list --name <AppName> --resource-group <ResourceGroupName> --output table
az webapp show --slot <SlotName> --name <AppName> --resource-group <ResourceGroupName>

# Get traffic-routing
az webapp traffic-routing show --name <AppName> --resource-group <ResourceGroupName>

# Get used container by the app
az webapp config container show --name <name> --resource-group <res-group>

# Get storage account configurations of a webapp (contains access key)
az webapp config storage-account list --name <name> --resource-group <res-group>

# Get configured container (if any) in the webapp, it could contain credentials
az webapp config container show --name <name> --resource-group <res-group>

# Get git URL to access the code
az webapp deployment source config-local-git --resource-group <res-group> -n <name>

# Get Webjobs
az webapp webjob continuous list --resource-group <res-group> --name <app-name>
az webapp webjob triggered list --resource-group <res-group> --name <app-name>

# Read webjobs logs with Azure permissions
az rest --method GET --url "<SCM-URL>/vfs/data/jobs/<continuous | triggered>/rev5/job_log.txt"  --resource "https://management.azure.com/"
az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/rev5/job_log.txt"  --resource "https://management.azure.com/"

# Read webjobs logs with SCM credentials
curl "https://windowsapptesting-ckbrg3f0hyc8fkgp.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/lala/job_log.txt" \
--user '<username>:<password>' -v

# Get connections of a webapp
az webapp conection list --name <name> --resource-group <res-group>

# Get hybrid-connections of a webapp
az webapp hybrid-connections list --name <name> --resource-group <res-group>

# Get configured SMC users by your account
az webapp deployment user show
## If any user is created, the username should appear in the "publishingUserName" field

Az - App Services Privesc

Ejemplos para generar Aplicaciones Web

Python desde local

Este tutorial se basa en el de https://learn.microsoft.com/en-us/azure/app-service/quickstart-python.

# Clone repository
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
cd msdocs-python-flask-webapp-quickstart

# Create webapp from this code
az webapp up --runtime PYTHON:3.9 --sku B1 --logs

Iniciar sesi贸n en el portal SCM o iniciar sesi贸n a trav茅s de FTP permite ver en /wwwroot el archivo comprimido output.tar.gz que contiene el c贸digo de la webapp.

Tip

Simplemente conectarse a trav茅s de FTP y modificar el archivo output.tar.gz no es suficiente para cambiar el c贸digo ejecutado por la webapp.

Un atacante podr铆a descargar este archivo, modificarlo y volver a subirlo para ejecutar c贸digo arbitrario en la webapp.

Python desde Github

Este tutorial se basa en el anterior pero utilizando un repositorio de Github.

  1. Haz un fork del repo msdocs-python-flask-webapp-quickstart en tu cuenta de Github.
  2. Crea una nueva Web App de Python en Azure.
  3. En Deployment Center, cambia la fuente, inicia sesi贸n con Github, selecciona el repo forkeado y haz clic en Save.

Al igual que en el caso anterior, iniciar sesi贸n en el portal SCM o iniciar sesi贸n a trav茅s de FTP permite ver en /wwwroot el archivo comprimido output.tar.gz que contiene el c贸digo de la webapp.

Tip

Simplemente conectarse a trav茅s de FTP y modificar el archivo output.tar.gz y volver a activar un despliegue no es suficiente para cambiar el c贸digo ejecutado por la webapp.

Escalamiento de Privilegios

Az - App Services Privesc

Referencias

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks