Az - AI Foundry, AI Hubs, Azure OpenAI & AI Search

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

Pourquoi ces services sont importants

Azure AI Foundry est la plateforme de Microsoft pour construire des applications GenAI. Un hub agrÚge des AI projects, des Azure ML workspaces, du compute, des data stores, des registries, des prompt flow assets, et des connexions vers des services en aval tels que Azure OpenAI et Azure AI Search. Chaque composant expose communément :

  • ClĂ©s API Ă  longue durĂ©e de vie (OpenAI, Search, data connectors) rĂ©pliquĂ©es dans Azure Key Vault ou dans des workspace connection objects.
  • Managed Identities (MI) qui contrĂŽlent les dĂ©ploiements, les jobs d’indexation vectorielle, les pipelines d’évaluation de modĂšles, et les opĂ©rations Git/GitHub Enterprise.
  • Cross-service links (storage accounts, container registries, Application Insights, Log Analytics) qui hĂ©ritent des permissions du hub/projet.
  • Multi-tenant connectors (Hugging Face, Azure Data Lake, Event Hubs) qui peuvent leak des identifiants ou des tokens en amont.

La compromission d’un seul hub/projet peut donc impliquer le contrĂŽle des managed identities en aval, des clusters compute, des online endpoints, et de tous les search indexes ou OpenAI deployments rĂ©fĂ©rencĂ©s par les prompt flows.

Composants principaux et surface d’attaque

  • AI Hub (Microsoft.MachineLearningServices/hubs): Objet de niveau supĂ©rieur qui dĂ©finit la rĂ©gion, le managed network, les system datastores, le Key Vault par dĂ©faut, le Container Registry, Log Analytics, et les hub-level identities. Un hub compromis permet Ă  un attaquant d’injecter de nouveaux projects, registries, ou user-assigned identities.
  • AI Projects (Microsoft.MachineLearningServices/workspaces): HĂ©bergent les prompt flows, data assets, environments, component pipelines, et les online/batch endpoints. Les projects hĂ©ritent des ressources du hub et peuvent aussi les surcharger avec leur propre storage, kv, et MI. Chaque workspace stocke des secrets sous /connections et /datastores.
  • Managed Compute & Endpoints: Inclut les managed online endpoints, batch endpoints, serverless endpoints, dĂ©ploiements AKS/ACI, et des on-demand inference servers. Les tokens rĂ©cupĂ©rĂ©s depuis Azure Instance Metadata Service (IMDS) Ă  l’intĂ©rieur de ces runtimes portent gĂ©nĂ©ralement les role assignments MI du workspace/projet (souvent Contributor ou Owner).
  • AI Registries & Model Catalog: Permettent le partage rĂ©gional de modĂšles, environments, composants, donnĂ©es, et rĂ©sultats d’évaluation. Les registries peuvent automatiquement se synchroniser avec GitHub/Azure DevOps, ce qui signifie que des PATs peuvent ĂȘtre intĂ©grĂ©s dans les connection definitions.
  • Azure OpenAI (Microsoft.CognitiveServices/accounts with kind=OpenAI): Fournit les modĂšles de la famille GPT. L’accĂšs est contrĂŽlĂ© via des role assignments + admin/query keys. Beaucoup de Foundry prompt flows conservent les clĂ©s gĂ©nĂ©rĂ©es comme secrets ou variables d’environnement accessibles depuis les compute jobs.
  • Azure AI Search (Microsoft.Search/searchServices): Le stockage vectoriel/index est typiquement connectĂ© via une Search admin key stockĂ©e dans une project connection. Les donnĂ©es d’index peuvent contenir des embeddings sensibles, des documents rĂ©cupĂ©rĂ©s, ou des corpus d’entraĂźnement bruts.

Architecture pertinente pour la sécurité

Managed Identities & Role Assignments

  • Les AI hubs/projects peuvent activer des identities system-assigned ou user-assigned. Ces identities dĂ©tiennent gĂ©nĂ©ralement des rĂŽles sur des storage accounts, Key Vaults, container registries, ressources Azure OpenAI, services Azure AI Search, Event Hubs, Cosmos DB, ou des APIs personnalisĂ©es.
  • Les online endpoints hĂ©ritent du MI du projet ou peuvent ĂȘtre configurĂ©s avec un MI user-assigned dĂ©diĂ© par dĂ©ploiement.
  • Les prompt flow connections et les Automated Agents peuvent demander des tokens via DefaultAzureCredential ; capturer l’endpoint metadata depuis le compute fournit des tokens pour le mouvement latĂ©ral.

Network Boundaries

  • Les hubs/projects supportent publicNetworkAccess, private endpoints, Managed VNet et **managedOutbound** rules. Une mauvaise configuration de allowInternetOutbound` ou des scoring endpoints ouverts permet une exfiltration directe.
  • Azure OpenAI et AI Search supportent firewall rules, Private Endpoint Connections (PEC), shared private link resources, et trustedClientCertificates. Quand l’accĂšs public est activĂ©, ces services acceptent des requĂȘtes depuis n’importe quelle IP source qui connaĂźt la clĂ©.

Data & Secret Stores

  • Les dĂ©ploiements par dĂ©faut de hub/projet crĂ©ent un storage account, un Azure Container Registry, un Key Vault, un Application Insights, et un Log Analytics workspace Ă  l’intĂ©rieur d’un managed resource group cachĂ© (pattern: mlw-<workspace>-rg).
  • Les workspace datastores rĂ©fĂ©rencent des blob/data lake containers et peuvent embarquer des SAS tokens, des secrets de service principal, ou des storage access keys.
  • Les workspace connections (pour Azure OpenAI, AI Search, Cognitive Services, Git, Hugging Face, etc.) conservent les credentials dans le Key Vault du workspace et les exposent via le management plane lors de l’affichage de la connection (les valeurs sont du JSON encodĂ© en base64).
  • AI Search admin keys fournissent un accĂšs complet en lecture/Ă©criture aux indexes, skillsets, data sources, et peuvent rĂ©cupĂ©rer des documents qui alimentent les systĂšmes RAG.

Monitoring & Supply Chain

  • AI Foundry prend en charge l’intĂ©gration GitHub/Azure DevOps pour le code et les prompt flow assets. Les OAuth tokens ou PATs rĂ©sident dans le Key Vault + la connection metadata.
  • Le Model Catalog peut reflĂ©ter des artifacts Hugging Face. Si trust_remote_code=true, du code Python arbitraire s’exĂ©cute pendant le dĂ©ploiement.
  • Les data/feature pipelines loggent vers Application Insights ou Log Analytics, exposant des connection strings.

ÉnumĂ©ration avec 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']"

Ce qu’il faut rechercher lors de l’évaluation

  • PortĂ©e d’identitĂ© : Les projets rĂ©utilisent souvent une identitĂ© assignĂ©e par l’utilisateur puissante attachĂ©e Ă  plusieurs services. Capturer des IMDS tokens depuis n’importe quel compute gĂ©rĂ© hĂ©rite de ces privilĂšges.
  • Objets de connexion : La payload Base64 inclut le secret plus les mĂ©tadonnĂ©es (endpoint URL, API version). Beaucoup d’équipes laissent les clĂ©s admin OpenAI + Search ici plutĂŽt que de les faire tourner frĂ©quemment.
  • Connecteurs Git et sources externes : Les PATs ou les OAuth refresh tokens peuvent permettre un accĂšs en push au code qui dĂ©finit les pipelines / prompt flows.
  • Datastores et assets de donnĂ©es : Fournissent des SAS tokens valables pendant des mois ; les assets de donnĂ©es peuvent pointer vers des PII clients, des embeddings ou des corpus d’entraĂźnement.
  • Remplacements du Managed Network : allowInternetOutbound=true ou publicNetworkAccess=Enabled rend trivial l’exfiltration de secrets depuis les jobs/endpoints.
  • Groupe de ressources gĂ©rĂ© par le Hub : Contient le storage account (<workspace>storage), le container registry, KV, et Log Analytics. L’accĂšs Ă  ce RG signifie souvent une prise de contrĂŽle complĂšte mĂȘme si le portail le cache.

Références

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks