Az - AI Foundry, AI Hubs, Azure OpenAI & AI Search
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
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
Por qué importan estos servicios
Azure AI Foundry es el paraguas de Microsoft para construir aplicaciones GenAI. Un hub agrega AI projects, Azure ML workspaces, compute, data stores, registries, prompt flow assets y conexiones a servicios downstream como Azure OpenAI y Azure AI Search. Cada componente suele exponer:
- Long-lived API keys (OpenAI, Search, data connectors) replicadas dentro de Azure Key Vault o en objetos de connection del workspace.
- Managed Identities (MI) que controlan deployments, vector indexing jobs, model evaluation pipelines y operaciones de Git/GitHub Enterprise.
- Cross-service links (storage accounts, container registries, Application Insights, Log Analytics) que heredan permisos del hub/project.
- Multi-tenant connectors (Hugging Face, Azure Data Lake, Event Hubs) que pueden leak upstream credentials o tokens.
La compromisión de un único hub/project puede por tanto implicar control sobre managed identities downstream, compute clusters, online endpoints y cualquier search indexes u OpenAI deployments referenciados por prompt flows.
Componentes principales y superficie de seguridad
- AI Hub (
Microsoft.MachineLearningServices/hubs): Objeto de alto nivel que define región, managed network, system datastores, default Key Vault, Container Registry, Log Analytics, e identidades a nivel de hub. Un hub comprometido permite a un atacante inyectar nuevos projects, registries o user-assigned identities. - AI Projects (
Microsoft.MachineLearningServices/workspaces): Alojan prompt flows, data assets, environments, component pipelines y online/batch endpoints. Los projects heredan recursos del hub y también pueden sobrescribir con su propio storage, kv y MI. Cada workspace almacena secrets bajo/connectionsy/datastores. - Managed Compute & Endpoints: Incluye managed online endpoints, batch endpoints, serverless endpoints, AKS/ACI deployments y on-demand inference servers. Tokens obtenidos desde Azure Instance Metadata Service (IMDS) dentro de estos runtimes suelen portar las role assignments del workspace/project MI (comúnmente
ContributoroOwner). - AI Registries & Model Catalog: Permiten compartir modelos, environments, components, data y evaluation results a nivel regional. Los registries pueden sincronizarse automáticamente con GitHub/Azure DevOps, lo que significa que PATs pueden quedar embebidos dentro de las definiciones de connection.
- Azure OpenAI (
Microsoft.CognitiveServices/accountswithkind=OpenAI): Proporciona modelos de la familia GPT. El acceso se controla vía role assignments + admin/query keys. Muchos prompt flows de Foundry mantienen las keys generadas como secrets o environment variables accesibles desde compute jobs. - Azure AI Search (
Microsoft.Search/searchServices): El almacenamiento de vectores/indexes típicamente se conecta mediante una Search admin key guardada dentro de la connection del project. Los datos del index pueden contener embeddings sensibles, documentos recuperados o corpora de entrenamiento en bruto.
Arquitectura relevante para la seguridad
Managed Identities & Role Assignments
- AI hubs/projects pueden habilitar identidades system-assigned o user-assigned. Estas identities suelen tener roles sobre storage accounts, key vaults, container registries, Azure OpenAI resources, Azure AI Search services, Event Hubs, Cosmos DB o APIs custom.
- Los online endpoints heredan el MI del project o pueden sobrescribir con un user-assigned MI dedicado por deployment.
- Prompt Flow connections y Automated Agents pueden solicitar tokens vía
DefaultAzureCredential; capturar el metadata endpoint desde el compute proporciona tokens para movimiento lateral.
Network Boundaries
- Hubs/projects soportan
publicNetworkAccess, private endpoints, Managed VNet y reglas managedOutbound. Una mala configuración deallowInternetOutboundo scoring endpoints abiertos permite exfiltración directa. - Azure OpenAI y AI Search soportan firewall rules, Private Endpoint Connections (PEC), shared private link resources y
trustedClientCertificates. Cuando el acceso público está habilitado, estos servicios aceptan requests desde cualquier source IP que conozca la key.
Data & Secret Stores
- Las deployments por defecto de hub/project crean una storage account, Azure Container Registry, Key Vault, Application Insights y un Log Analytics workspace dentro de un resource group gestionado oculto (patrón:
mlw-<workspace>-rg). - Los workspace datastores referencean blob/data lake containers y pueden embed SAS tokens, service principal secrets o storage access keys.
- Las workspace connections (para Azure OpenAI, AI Search, Cognitive Services, Git, Hugging Face, etc.) guardan credenciales en el Key Vault del workspace y las exponen a través del plano de management al listar la connection (los valores están en JSON codificado en base64).
- AI Search admin keys proporcionan acceso total de lectura/escritura a indexes, skillsets, data sources y pueden recuperar documentos que alimentan sistemas RAG.
Monitoring & Supply Chain
- AI Foundry soporta integración con GitHub/Azure DevOps para código y prompt flow assets. OAuth tokens o PATs viven en el Key Vault + metadata de las connections.
- El Model Catalog puede espejar artifacts de Hugging Face. Si
trust_remote_code=true, Python arbitrario se ejecuta durante el deployment. - Pipelines de datos/features registran en Application Insights o Log Analytics, exponiendo connection strings.
Enumeration with az
# Install the Azure ML / AI CLI extension (if missing)
az extension add --name ml
# Enumerate AI Hubs (workspaces with kind=hub) and inspect properties
az ml workspace list --filtered-kinds hub --resource-group <RG> --query "[].{name:name, location:location, rg:resourceGroup}" -o table
az resource show --name <HUB> --resource-group <RG> \
--resource-type Microsoft.MachineLearningServices/workspaces \
--query "{location:location, publicNetworkAccess:properties.publicNetworkAccess, identity:identity, managedResourceGroup:properties.managedResourceGroup}" -o jsonc
# Enumerate AI Projects (kind=project) under a hub or RG
az resource list --resource-type Microsoft.MachineLearningServices/workspaces --query "[].{name:name, rg:resourceGroup, location:location}" -o table
az ml workspace list --filtered-kinds project --resource-group <RG> \
--query "[?contains(properties.hubArmId, '/workspaces/<HUB>')].{name:name, rg:resourceGroup, location:location}"
# Show workspace level settings (managed identity, storage, key vault, container registry)
az ml workspace show --name <WS> --resource-group <RG> \
--query "{managedNetwork:properties.managedNetwork, storageAccount:properties.storageAccount, containerRegistry:properties.containerRegistry, keyVault:properties.keyVault, identity:identity}"
# List workspace connections (OpenAI, AI Search, Git, data sources)
az ml connection list --workspace-name <WS> --resource-group <RG> --populate-secrets -o table
az ml connection show --workspace-name <WS> --resource-group <RG> --name <CONNECTION>
# For REST (returns base64 encoded secrets)
az rest --method GET \
--url "https://management.azure.com/subscriptions/<SUB>/resourceGroups/<RG>/providers/Microsoft.MachineLearningServices/workspaces/<WS>/connections/<CONN>?api-version=2024-04-01"
# Enumerate datastores and extract credentials/SAS
az ml datastore list --workspace-name <WS> --resource-group <RG>
az ml datastore show --name <DATASTORE> --workspace-name <WS> --resource-group <RG>
# List managed online/batch endpoints and deployments (capture identity per deployment)
az ml online-endpoint list --workspace-name <WS> --resource-group <RG>
az ml online-endpoint show --name <ENDPOINT> --workspace-name <WS> --resource-group <RG>
az ml online-deployment show --name <DEPLOYMENT> --endpoint-name <ENDPOINT> --workspace-name <WS> --resource-group <RG> \
--query "{identity:identity, environment:properties.environmentId, codeConfiguration:properties.codeConfiguration}"
# Discover prompt flows, components, environments, data assets
az ml component list --workspace-name <WS> --resource-group <RG>
az ml data list --workspace-name <WS> --resource-group <RG> --type uri_folder
az ml environment list --workspace-name <WS> --resource-group <RG>
az ml job list --workspace-name <WS> --resource-group <RG> --type pipeline
# List hub/project managed identities and their role assignments
az identity list --resource-group <RG>
az role assignment list --assignee <MI-PRINCIPAL-ID> --all
# Azure OpenAI resources (filter kind==OpenAI)
az resource list --resource-type Microsoft.CognitiveServices/accounts \
--query "[?kind=='OpenAI'].{name:name, rg:resourceGroup, location:location}" -o table
az cognitiveservices account list --resource-group <RG> \
--query "[?kind=='OpenAI'].{name:name, location:location}" -o table
az cognitiveservices account show --name <AOAI-NAME> --resource-group <RG>
az cognitiveservices account keys list --name <AOAI-NAME> --resource-group <RG>
az cognitiveservices account deployment list --name <AOAI-NAME> --resource-group <RG>
az cognitiveservices account network-rule list --name <AOAI-NAME> --resource-group <RG>
# Azure AI Search services
az search service list --resource-group <RG>
az search service show --name <SEARCH-NAME> --resource-group <RG> \
--query "{sku:sku.name, publicNetworkAccess:properties.publicNetworkAccess, privateEndpoints:properties.privateEndpointConnections}"
az search admin-key show --service-name <SEARCH-NAME> --resource-group <RG>
az search query-key list --service-name <SEARCH-NAME> --resource-group <RG>
az search shared-private-link-resource list --service-name <SEARCH-NAME> --resource-group <RG>
# AI Search data-plane (requires admin key in header)
az rest --method GET \
--url "https://<SEARCH-NAME>.search.windows.net/indexes?api-version=2024-07-01" \
--headers "api-key=<ADMIN-KEY>"
az rest --method GET \
--url "https://<SEARCH-NAME>.search.windows.net/datasources?api-version=2024-07-01" \
--headers "api-key=<ADMIN-KEY>"
az rest --method GET \
--url "https://<SEARCH-NAME>.search.windows.net/indexers?api-version=2024-07-01" \
--headers "api-key=<ADMIN-KEY>"
# Linkage between workspaces and search / openAI (REST helper)
az rest --method GET \
--url "https://management.azure.com/subscriptions/<SUB>/resourceGroups/<RG>/providers/Microsoft.MachineLearningServices/workspaces/<WS>/connections?api-version=2024-04-01" \
--query "value[?properties.target=='AzureAiSearch' || properties.target=='AzureOpenAI']"
Qué buscar durante la evaluación
- Ámbito de identidad: Los proyectos a menudo reutilizan una identidad asignada por el usuario potente adjunta a múltiples servicios. Capturar IMDS tokens desde cualquier managed compute hereda esos privilegios.
- Connection objects: La carga Base64 incluye el secret más metadata (endpoint URL, API version). Muchos equipos dejan OpenAI + Search admin keys aquí en lugar de rotarlas con frecuencia.
- Git & external source connectors: Los PATs u OAuth refresh tokens pueden permitir acceso push al código que define pipelines/prompt flows.
- Datastores & data assets: Suelen proporcionar SAS tokens válidos por meses; los data assets pueden apuntar a PII de clientes, embeddings o training corpora.
- Managed Network overrides:
allowInternetOutbound=trueopublicNetworkAccess=Enabledhace trivial exfiltrar secrets desde jobs/endpoints. - Hub-managed resource group: Contiene la storage account (
<workspace>storage), container registry, KV y Log Analytics. El acceso a ese RG a menudo significa full takeover incluso si el portal lo oculta.
References
- Azure AI Foundry architecture
- Azure Machine Learning CLI v2
- Azure OpenAI security controls
- Azure AI Search security
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
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
HackTricks Cloud

